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

猴子第一天摘下N个桃子,当时就吃了一半,还不过瘾,就又多吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃前一天剩下的一半零一个。到第10天在想吃的时候就剩一个桃子了,问第一天共摘下来多少个桃子?并反向打印每天所剩桃子数。这是怎么来的?

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

提问者:慕粉4001126 2016-10-26 16:43

个回答

  • 那谁很靠谱3587144
    2016-10-28 17:23:16
    已采纳

    我来谈谈理解吧,也是看了好些视频和上面这位大神的答案才明白的

    #include <stdio.h>
    int getPeachNumber(n)//注释1:下面会有解释
    {
        int num;    //定义所剩桃子数
        if(n==10)//注释2:下面会有解释
        {
            return 1;     
        } 
        else
        {
            num = (getPeachNumber(n+1)+1)*2; //注释3,下面会有解释 
            printf("第%d天所剩桃子%d个\n",n,num); 
        }
        return num;
    }
    int main()
    {
        int num = getPeachNumber(1);
        printf("猴子第一天摘了:%d个桃子。\n", num);
        return 0;
    }

    注释1:getPeachNumber(n),这个当中的(n)代表的是天数

    注释2:当n等于10的时候,输出1,//第十天的时候,还剩1个桃子

    注释3:第1天的桃子数量,现在我们不知道,但是我们知道第1天的桃子等于第2天的桃子数量加1乘以2,用公式表达就是(n+1)这个是天数,(n+1)+1这个是第2天的桃子数量+1,((n+1)+1)*2这个是第2天的桃子数量+1然后乘以2,但是第二天的剩余的桃子数量现在也不知道,程序会继续按照这个公式往下走,一直到n==10,这个时候就知道了,第10天剩余1个桃子,现在程序就可以算出第9天等于((1+1)+1)*2等于4,然后这个公式继续往下走,就能算出第8天等于((4)+1)*2,一直到最后算出第1天的出来,打印的顺序是,先算出那个,就打印哪个

    写的有点乱,这个能看懂吗。。。

  • 平丘君
    2019-12-10 14:45:02

    n从头到尾没有说过是什么数据类型

  • 孤岛_violet
    2018-03-25 11:35:55

    老哥你写的不对呀,n没有定义



  • qq_时过境迁_13
    2016-12-17 16:07:05

    感谢,明白了

  • 刘一_53707959
    2016-11-20 19:37:51


    感谢  
    明白了很多

  • JustWannaHugU
    2016-10-26 17:36:39

    这句话是重点

    以后每天都吃前一天剩下的一半零一个

    num = (getPeachNumber(n+1)+1)*2;就是从后往前求的关系式,比如说要求第九天的桃子数量,num9=(getPeachNumber(9+1)+1)*2即第十天的桃子数量加上多吃的一个桃子之后再乘以二