第1关:经典兔子问题——递归
任务描述
问题:有一对兔子,从出生后的第三个月起,每个月都生一对兔子,小兔子再长三个月后每个月又生一对兔子!假如兔子都不死,请问每个月的兔子的数量是多少对? 本关任务:编写程序求解上面的问题。
相关知识
兔子问题的分析
假设第一个月有一对出生的兔子,在第二月是成长期不生兔子,在第三个月开始生小兔一对,第四个第一个月的一对兔子持续生一对小兔第三个月生的小兔还在成长期,一次类推:
我们看出来,假设在第n
个月(n>2)
,则n-2
月的兔子全部成熟可以在第n
个月生产小兔,n-1
月新生的小兔在n
月仍处于成长期不能生小兔,所以在第n
个月新生小兔数量就是n-2
月的兔子数,再加上n-1
月兔子的基数(非新生的兔子)就是第n
个月的兔子数量,即F(n)=F(n-1)+F(n)
兔子问题的代码编程
通过对问题分析后,经典兔子就转化成了递归问题,第1个月只有1对新生兔,使用F(1)=1
表示,第二个月有1对兔子,使用F(2)=1
表示,第三个月F(3)=F(1)+F(2)
,其中F(1)
表示在第3个月新生兔对数,F(2)
表示非新生兔,那么就可以转化成了递归问题:
def rabbit(m):
"""
m:月份
return:第m月兔子对数
"""
if (m ==1) | (m==2):
return 1
else:
#请在下面的空白处补充完成代码,第m个月有多少对兔子
########### Begin ##########
-
########### Begin ##########
编程要求
根据提示,首先点击右边代码文件,按要求补充完整代码,然后点击图形化窗口进入可视化界面,点击测试。
测试说明
点击右下角测评后,再返回到图形化窗口。 等待排序窗口出现,点击开始排序查看排序过程。 排序完成后,在600s内点击 exit,使界面关闭,即可进行测评。 若执行成功,说明成功通关。
开始你的任务吧,祝你成功!
# -*- coding:utf8 -*-
def rabbit(m):
"""
m:月份
return:第m月兔子对数
"""
# 请在下面的空白处补充完成代码,第m个月有多少对兔子
########### Begin ##########
if m<=2:
return 1
else:
return rabbit(m-1)+rabbit(m-2)
########### Begin ##########