斐波那契数列问题,兔子生小兔子的问题

'''
有一对兔子,从出生后开始每个与都生一对兔子,小兔子长到三个月以后每个月又生一对兔子
假如兔子都不死,问每个月兔子的对数
输入:
3
输出:
2
'''
n=int(input())
for z in range(n):
    n=z
    print('月份:',n+1)
    if n<2: #0-1个月兔子数始终是1
        print(1)
    else:
        list1=[1] #记录老兔子数
        list2=[0,0] #记录新出生兔子数,分为出生第0个月、第一个月
        for i in range(2,n+1):
            new_tuzi=list1[-1] #新增兔子数等于老兔子数
            old_tuzi=list1[-1] #老兔子数
            #print('新兔子',new_tuzi)
            #print('老兔子',old_tuzi)            
            list2.insert(0,new_tuzi) #将新增的兔子记录下来
            #print(list2)
            new_old_tuzi=list2.pop() #找出成长到两个月的新兔子
            old_tuzi+=new_old_tuzi #将新兔子更新到老兔子中
            list2[0]+=new_old_tuzi #此时新兔子已经生下一对了,所以将新生的兔子更新到0个月的兔子中
            #记录最新的老兔子数
            list1.append(old_tuzi)
        print(list1)
        print(list2)
        print(old_tuzi+sum(list2)) #本月兔子数等于老兔子+0和1个月的新兔子
输入:10
输出:
10
月份: 1
1
月份: 2
1
月份: 3
2
月份: 4
3
月份: 5
5
月份: 6
8
月份: 7
13
月份: 8
21
月份: 9
34
月份: 10
55            

可以看出第n个月的兔子数f(n)
f(n)=f(n-1)+f(n-2)就是斐波那契数列求解

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值