问答详情
源自:5-8 递归函数(二)

还是看不懂这段的意思。。。。

 num = (getPeachNumber(n+1)+1)*2; 

提问者:慕仰9056393 2016-05-24 23:41

个回答

  • 小雾3378873
    2016-06-07 19:23:37
    已采纳

    让我们来看看它是如何被调用的吧,

    首先理解: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个桃子。

     

     

  • 慕移动9181930
    2022-03-23 01:14:36

    因为字号的css属性是可以继承的,所以给body设置字段就相当于给段落设置字号,不过为了严谨些,我们还是完善一下好。setIconEnable(menu,true);

  • 慕粉3973651
    2016-10-06 00:06:10

    感谢感谢

  • 一只发愤图强的猪
    2016-05-25 08:54:14

    比如第九天 剩4个桃子 第十天 剩一个桃子 第九天的就是getPeachNumber(9),第十天的就是getPeachNumber(10),因为是先吃一半 然后再吃一个 所以第九天的数量就是第十天的先加上先吃掉的那个1 然后再乘以二 递归函数调用自身 从10一直到第一天