还是看不懂这段的意思。。。。
num = (getPeachNumber(n+1)+1)*2;
num = (getPeachNumber(n+1)+1)*2;
2016-05-24
让我们来看看它是如何被调用的吧,
首先理解: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个桃子。
举报