慕仰9056393
2016-05-24 23:41
num = (getPeachNumber(n+1)+1)*2;
让我们来看看它是如何被调用的吧,
首先理解:int getPeachNumber(n); //定义以n为形参的自定义函数
然后理解:getPeachNumber(n+1); //调用自定义函数,并将n+1的值赋给形参n,即求n=n+1时此函数的返回值
最后理解:num = (getPeachNumber(n+1)+1)*2;
从n=1开始 因为不等于10所以将1代入上式即:
n==1时执行到num=(getPeachNumber(1+1)+1)*2 此时()内为2,即开始执行n==2时的递归函数
n==2时 执行到num=(getPeachNumber(2+1)+1)*2 此时()内为3,即开始执行n==3时的递归函数
n==3时 执行到num=(getPeachNumber(3+1)+1)*2 此时()内为4,即开始执行n==4时的递归函数
n==4时 执行到num=(getPeachNumber(4+1)+1)*2 此时()内为5,即开始执行n==5时的递归函数
n==5时 执行到num=(getPeachNumber(5+1)+1)*2 此时()内为6,即开始执行n==6时的递归函数
n==6时 执行到num=(getPeachNumber(6+1)+1)*2 此时()内为7,即开始执行n==7时的递归函数
n==7时 执行到num=(getPeachNumber(7+1)+1)*2 此时()内为8,即开始执行n==8时的递归函数
n==8时 执行到num=(getPeachNumber(8+1)+1)*2 此时()内为9,即开始执行n==9时的递归函数
n==9时 执行到num=(getPeachNumber(9+1)+1)*2 此时()内为10,即开始执行n==10时的递归函数
n==10,时,即执行return 1; 结束递归并返回值为1,即:getPeachNumber(9+1)=1,因为第10层递归结束了,所以要计算每层递归函数的返回值,以及后面的语句:printf("第%d天所剩桃子%d个\n", n, num);
返回结果:
因为运行到n==10时我们得出getPeachNumber(9+1)=1,所以当n==9时就可以算出来了:
n==9时,num=(getPeachNumber(9+1)+1)*2 ——>num=(1+1)*2 =4
输出:第9天所剩桃子4个
n==8时,num=(getPeachNumber(8+1)+1)*2 ——>num=(4+1)*2 =10
输出:第8天所剩桃子10个
以此类推:
第7天所剩桃子22个
第6天所剩桃子46个
第5天所剩桃子94个
第4天所剩桃子190个
第3天所剩桃子382个
第2天所剩桃子766个
第1天所剩桃子1534个
最后再执行:
printf("猴子第一天摘了:%d个桃子。\n", num);
猴子第一天摘了:1534个桃子。
感谢感谢
比如第九天 剩4个桃子 第十天 剩一个桃子 第九天的就是getPeachNumber(9),第十天的就是getPeachNumber(10),因为是先吃一半 然后再吃一个 所以第九天的数量就是第十天的先加上先吃掉的那个1 然后再乘以二 递归函数调用自身 从10一直到第一天
C语言入门
926207 学习 · 20797 问题
相似问题