程序11
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
代码:
def rabbit_total_number(month=5): match month: case i if i <= 0: return 0 case 1: return 1 case 2: return 2 case i if i >= 3: return rabbit_total_number(month - 1) + rabbit_total_number(month - 2) #此处 month 可用 i 代替 case _: return rabbit_total_number(month) if __name__ == "__main__": month = int(input("请输入需要求兔子总数的月份:")) print(f'第{month}月的兔子总数为:{rabbit_total_number(month)}对,共{rabbit_total_number(month) * 2}只。')成果:
请输入需要求兔子总数的月份:10
第10月的兔子总数为:89对,共178只。
后记:
1.本例为斐波那契数列问题。思考如下:
第1个月:1对
第2个月:1对
第3个月:2对
第4个月:3对
第5个月:5对
……
从第三个月往后,就是前1个月(month - 1)的兔子对数(表示上个月已经有的兔子) + 前2个月(month - 2)的兔子对数(表示能够生育的兔子)
2.采用递归函数编写
3.继续熟练match语句
4.说明:求到40月份以后,速度降低的非常大。过大的月份,慎用此程序。