先上概念:递归:从未知出发,不断缩小问题规模,最终利用已知条件找出递归出口,找出最终结果的过程。
递推:从已知出发,推出未知,常见有逆推和顺推。
猴子吃桃原型是这样的:猴子摘了一堆桃子,第一天吃了总数一半多一个,第二天吃了剩余桃子的一半多一个.......直到第十天,他发现只剩1个桃子,问他开始摘了几个桃子?
最开始拿到这题是想顺着推出找规律:桃子总数为N,找出每天吃了几个加起来就得到总数。第一天吃了N/2+1个,第二天吃了(N/2-1)/2+1个,第三天吃了(N-(N+2)/4-(N+2)/2)/2+1,然后推导到这一步我就不推了(这是套娃,而且还没思路)
显然看一眼题目,第十天剩1个桃子,可以采用逆推,这时就设第九天有x个桃子,x-(x/2+1)=1,得出x=4,然后再第九天推第八天......最后推第一天桃子总数。(我一想,这法子可行,虽然套娃但有规律)。
上述的方法就是递推中的顺推和逆推,正好符合定义:从已知出发,推出未知。
然后我在想,逆推时候这个1个桃子是第十天剩余的桃子数,逆推结果是每天剩余桃子数,我就想正推思路是不是就有问题,着重点应该在每天剩余桃子数上。如果n代表天数,N代表第一天桃子数
推导出来:f(1)=(f(2)+1)*2