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

为什么 num = (getPeachNumber(n + 1) + 1) * ??

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

提问者:编程白吃1571655 2018-06-19 16:21
微课

个回答

  • 慕娘9505769
    2018-07-21 16:07:19

    还有第二行代码:int getPeachNumber(n)是错误的。虽然在最后可以算出正确结果,但有错误提示。

    (n)没有定义数据类型,因为是天数,所以用整型,(int n)

  • 慕娘9505769
    2018-07-21 16:02:16

    根据题意做下假设,就拿第5、6天来说明。

    假设第5天桃子数为a,第6天桃子数为b,得到下面公式:

    a/2-1=b  //可以理解为这个公式用在递推

    那么当计算到第10天,结果为1,反回值时就需要变换公式了

    a-1*2=b*2  //等号两边乘以2

    a=b*2+1*2 //把1*2移到等号右边

    a=(b+1)*2  //把2提取出来

    写成函数代码就是:(getPeachNumbern(n)+1)*2

    又因为递推时,getPeachNumber(0)是没有意义,保证n最小值为1,就写成n+1

    最后结果:(getPeachNumber(n+1)+1)*2

  • kirito_yes
    2018-07-04 11:13:21

    因为现在告诉你的是第十天的桃子数,而main函数中是求总桃子数,也就是第一天摘的桃子数,那怎么办呢?那么递归就是通过不断调用自身来获取已知的值,既然第一天桃子数不知道,那就看看第二天的桃子数,而第一天的桃子数等于第二天的桃子数+1再*2,那第二天的桃子数又不知道,又调用自身的函数,再往前推,一直到第十天,终于知道等于一个了,计算机这样不断累加回去得出最后的答案。

  • 李辰洋
    2018-07-02 19:45:07

    在这个程序中,初始设定只知道getpeachnumber(10)=1,要先推出(getpeachnumber(9+1)+1)*2=num(第九天的情况)才能继续往下推。



  • 江小白DM
    2018-06-21 16:30:37

    可以理解为函数有f(n+1)=f(n)-(f(n)/2+1),即第n+1天所剩桃子数,换过来f(n)=2*(f(n+1)+1),即第n天所剩桃子数,f(n)=num

  • Jairo
    2018-06-19 21:29:14

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

    应为递归 最后一次为第十天剩下1个桃子,由此往前推,剩下的1桃子个加1乘以2得到前一天的(由后向前从第十天-第九天----第一天)