为什么这个自定义 的函数不用调用就执行了以及为什么先从n=9开始
#include <stdio.h>
int getPeachNumber(int n)
{
int num; //定义所剩桃子数
if(n==10)
{
return 1; //递归结束条件
}
else
{
num = (getPeachNumber(n+1)+1)*2; //这里是不应该用递归呢?
printf("第%d天所剩桃子%d个\n", n, num); //天数,所剩桃子个数
}
return num;
}
int main()
{
int num = getPeachNumber(1);
printf("猴子第一天摘了:%d个桃子。\n", num);
return 0;
}
为什么这个自定义 的函数不用调用就执行了以及为什么先从n=9开始
#include <stdio.h>
int getPeachNumber(int n)
{
int num; //定义所剩桃子数
if(n==10)
{
return 1; //递归结束条件
}
else
{
num = (getPeachNumber(n+1)+1)*2;
//这里N=1代入,
num=(getPeachNumber(1+1)+1)*2
再调用getPeachNumber(2)
以此一直调用到(getPeachNumber(9+1)+1)*2
这时候getPeachNumber(10)=1
所以num=(1+1)*2=4
重点:这时候代码读下一行printf("第%d天所剩桃子%d个\n", n, num);
输出 第9天所剩桃子4个
这时候跳回我们上一个调用num=(getPeachNumber(8+1)+1)*2
则num=(4+1)*2=10,再输出。
以此类推
printf("第%d天所剩桃子%d个\n", n, num);
}
return num;
}
int main()
{
int num = getPeachNumber(1);//调用在这里
printf("猴子第一天摘了:%d个桃子。\n", num);
return 0;
}
输出第九天后,为什么会跳回到上一个调用