兔子繁殖

import java.util.Scanner;
public class day1108 {
	public static void main(String[] args) {
		Scanner reader=new Scanner(System.in);
		System.out.print("过了几个月?");
		int m=reader.nextInt();
		int a=0,b=0,e,d,c=2,n=0;
		//3月龄:d
		//2月龄:b
		//1月龄:a
		//生产出:e
		do {
			e=c/2;
			d=b;
			b=a;
			a=e;
			c=c+d;
			n++;	
		}while(n<m);
		System.out.println("现在有兔子"+(a+b+c)+"只");
	}
}


兔子繁殖问题通常指的是著名的 **斐波那契数列(Fibonacci Sequence)** 问题,由数学家斐波那契提出的一个理想化模型: > 🐰 假设: - 有一对刚出生的兔子(一公一母) - 每对兔子从第3个月开始,每个月生一对新兔子 - 兔子永不死亡 - 问:第 n 个月共有多少对兔子? 这个问题的经典解法就是斐波那契数列。 --- ## ✅ 斐波那契兔子繁殖规律 | 月份 | 兔子对数 | 说明 | |------|----------|------| | 第1个月 | 1 | 初始一对幼 | | 第2个月 | 1 | 还未成熟,不能生育 | | 第3个月 | 2 | 开始生一对 | | 第4个月 | 3 | 原来的能再生,上月新生的还小 | | 第5个月 | 5 | 满足 F(n) = F(n−1) + F(n−2) | 👉 递推公式: ``` F(1) = 1 F(2) = 1 F(n) = F(n-1) + F(n-2) (n ≥ 3) ``` --- ## ✅ Python 实现方式 ### 方法一:循环实现(推荐,效率高) ```python def rabbit(n): if n < 1: return "输入错误!月份必须大于0" elif n == 1 or n == 2: return 1 else: a, b = 1, 1 # 第1和第2个月 for i in range(3, n + 1): c = a + b a = b b = c return b # 输入月份 n = int(input("请输入月份:")) result = rabbit(n) print(f"第{n}个月共有 {result} 对兔子") ``` --- ### 方法二:递归实现(简洁但慢) ```python def rabbit_recursive(n): if n == 1 or n == 2: return 1 else: return rabbit_recursive(n - 1) + rabbit_recursive(n - 2) n = int(input("请输入月份:")) if n < 1: print("输入错误!") else: print(f"第{n}个月共有 {rabbit_recursive(n)} 对兔子") ``` ⚠️ 注意:递归方法在 `n > 35` 后会明显变慢,因为重复计算太多。 --- ### 方法三:使用列表保存所有月的数据 ```python def rabbit_list(months): if months < 1: print("月份必须大于0") return fib = [0] * (months + 1) if months >= 1: fib[1] = 1 if months >= 2: fib[2] = 1 for i in range(3, months + 1): fib[i] = fib[i - 1] + fib[i - 2] for i in range(1, months + 1): print(f"第{i}个月:{fib[i]} 对兔子") # 调用 rabbit_list(12) ``` 输出示例: ``` 第1个月:1 对兔子 第2个月:1 对兔子 第3个月:2 对兔子 第4个月:3 对兔子 第5个月:5 对兔子 ... ``` --- ### 方法四:生成器方式(节省内存,适合大数) ```python def rabbit_generator(): a, b = 1, 1 while True: yield a a, b = b, a + b # 使用:前10个月 gen = rabbit_generator() for i in range(10): print(f"第{i+1}个月:{next(gen)} 对兔子") ``` --- ## 🔍 解释 - `a, b = b, a + b` 是 Python 特有的同时赋值写法,避免中间变量。 - 循环方式时间复杂度 O(n),空间 O(1),最实用。 - 斐波那契增长极快,第50个月可达 **12,586,269,025** 对兔子! --- ## ✅ 扩展思考 你还可以扩展这个程序: - 加入“兔子寿命为3年”如何改? - 每对兔子每月生2对?如何调整? - 输出折线图?可用 `matplotlib` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值