一、问题描述
一个猴子摘了一些桃子,它第一天吃掉了其中的一半然后再多吃了一个,第二天照此方法又吃掉了剩下桃子的一半加一个,以后每天如此,直到第十天早上,猴子发现只剩下一个桃子了,问猴子第一天总共摘了多少个桃子?
二、问题分析
假设Ai为第i天吃完后剩下的桃子的个数,A0表示第一天共摘下的桃子。根据问题描述,前后相邻两天之间的桃子数的关系为: A=2(A(i+1)+1)
三、算法设计
可以使用递归函数来实现上述递推关系:假设第n天吃完后剩下的桃子数为A(n), 第n+1天吃完后剩下的桃子数为A(n+1),递推关系为:A(n)=(A(n+1)+1)*2
四、完整程序
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 递推公式:A(n) = 2 * (A(n+1) +1)
def A(n):
if n >= 9:
return 1
# 递归出口
else:
return 2 * (A(n + 1) + 1)
# 递推公式
if __name__ == "__main__":
print("猴子第一天总共摘了%d个桃子" % A(0))
五、运行结果