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

关于递归函数(二)的疑问

任务问题我总觉得别扭,,“猴子第一天摘下N个桃子,当时就吃了一半“,意思是不是第一天所剩和第一天摘的不一样啊; 第一天所剩=(第一天摘的/2 -1)啊 第二天=第一天所剩/2-1; 第三天=第二天所剩/2-1; . . . .第九天所剩=第八天所剩/2-1; 把我们的程序结果逆运算:第九天剩的=4 第八天=(4+1)*2=10; 第七天=(10+1)*2=22; . 第一天剩的=(766+1)*2; 第一天摘得=(1534+1)*2;. ,那么问题来了,猴子第一天到底摘了几个桃?

提问者:你二爷爷的三哥哥 2017-01-04 17:20

个回答

  • 慕后端3326841
    2017-01-10 06:43:53
    已采纳

    之前有回答这个问题:请参考:http://www.imooc.com/qadetail/179726 。

    你的疑问是对的,答案确实是点问题,题目本身没问题。{练习代码后面设置num为每天吃剩的桃的数目(int num;    //定义所剩桃子数。),在n=10时的时候递归终止,return1 ,可是这时候第十天还没吃呢,是吃之前就只有一个了,所以这个递归终止就不对,当然结果也就不对了},其实就是练习代码本身有点小问题导致的(虽然这不影响对递归的理解,不过我觉得该明白还是要明白)。                 实际吃前、吃后数目如下:

    猴子第一天摘了:1534个桃子。

    猴子第 1 天吃之前桃子个数:1534      吃之后桃子个数:766
    猴子第 2 天吃之前桃子个数:766        吃之后桃子个数:382
    猴子第 3 天吃之前桃子个数:382        吃之后桃子个数:190
    猴子第 4 天吃之前桃子个数:190        吃之后桃子个数:94
    猴子第 5 天吃之前桃子个数:94          吃之后桃子个数:46
    猴子第 6 天吃之前桃子个数:46          吃之后桃子个数:22
    猴子第 7 天吃之前桃子个数:22          吃之后桃子个数:10
    猴子第 8 天吃之前桃子个数:10          吃之后桃子个数:4
    猴子第 9 天吃之前桃子个数:4            吃之后桃子个数:1

    猴子第 10天吃之前桃子个数:1


  • Muse_greenday
    2017-01-04 20:05:05

    你好,第几天剩下几个桃子,应该描述为那天猴子吃饭前的桃子数量。(确实是题目描述不准确,但是不要转牛角尖啊,兄弟)

    依据就是倒推,题目明确说明第九天剩下4桃子,而且第十天吃之前发现只有一个桃子了。如果按你的分析,第九天剩下4个桃子,那第十天吃之前肯定还有4个,所以你的分析不成立。