猴子吃桃问题:猴子第一天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天, 又将剩下的桃子吃掉了剩下的一半,又多吃了一个,以后每天都吃了前一天的一半零一个,到第10天早上想再吃时,见只剩下了一个桃子,求第一天一共摘了多少个桃子。
可以反向思维,正向的猴子每天吃前一天的一半零一个可以等价于反向从第九天开始猴子“吐”前一天的两倍零两个。所以最开始的桃子总数其实就等于第九天“吐”的桃子的总数,代码如下。
def func(n, m):
if n == 1:
return 2 * n + 2
else:
return func(n - 1, m) * 2 + 2
print("第一天猴子摘得的桃子有{}个".format(func(9, 1)))
故所求得的共1534个桃子