21-猴子吃桃
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
程序分析:采取逆向思维的方法,从后往前推断。
方法1:递归函数
#x=1开始执行函数,第一天sum=第二天的‘(fun(x+1)+1)*2’倍,
# 这一部分又开始调用函数,此时x增加了1
#然后每递归一次,x增加1,
# 最后x=1,此时表达式中没有未知数,计算出最终结果并返回
def fun(x):
sum = 0
if x == 10:
sum = 1
else:
sum = (fun(x+1)+1)*2
return sum
print(fun(1))
#输出结果:
>>> python .\test.py
1534
26-递归函数求5!
题目:利用递归方法求5!。
程序分析:递归公式:fn=fn_1*4!
方法1:
def fun(x):
sum = 0
if x == 1:
sum = 1
else:
sum = x * fun(x-1)
return sum
print(fun(5))
#输出结果:
>>> python .\test.py
120
28-第5人年龄多少
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。
方法1:不使用递归
n = 10
for i in range(1, 5):
n = n + 2
print("第5个人{0}岁".format(n))
方法2:递归函数
def age(n):
if n == 1:
c = 10
else:
c = age(n-1)+2
return c
print(age(4))
print(age(5))
输出结果:
>>> python .\test.py
16
18