1.有一对幼年兔,长到三个月之后,从第三个月开始,每个月生一对兔子,生过之后的幼年兔,长到第三个月之后也会每个月生一对兔子,问:两年之后共有多少兔子?
解析:一对幼年兔,三个月后长成成年兔,并且生了一对幼年兔,而且成年兔每个月还会生一对幼年兔,生的幼年兔长到成年后,每个月也会生幼年兔以此类推。
s = {'lv1': 1, 'lv2': 0, 'lv3': 0}
for i in range(23):
s['lv3'] += s['lv2']
s['lv2'] = 0
s['lv2'] += s['lv1']
s['lv1'] = 0
s['lv1'] += s['lv3']
print(f"两年之后兔子为{(s['lv1'] + s['lv2'] + s['lv3']) * 2}")
我们可以分为一级兔,二级兔,三级兔,依次升级,这样问题就好解决多了
三级兔根据二级兔数量增加,二级兔根据一级兔增加,一级兔根据三级兔增加,以此类推
2.猴子吃桃问题
从前有一只猴子,摘了若干桃子,每天吃原来桃子的一半,觉得不过瘾,又多吃了一个,到了最后一天,发现只剩下一个桃子了,问猴子十天前有多少桃子?
def f(n):
if n == 10:
return 1
else:
return (f(n + 1) + 1) * 2
print(f(1))
这个问题其实就是依次叠加的问题,用递归就行了,猴子每天吃n/2-1个桃子,反过来思考,吃之前的桃子就是(n+1)*2个桃子 。
本人是新手,讲的有问题请帮忙提出。