【编程题】兔子生殖问题(斐波拉契数列)

本文通过编程解决兔子生殖问题,揭示其与斐波那契数列的联系。建议从数列角度思考,列出每月兔子数量,找到数列规律,避免仅关注兔子本身。
    十三世纪初,数学家菲波拉契在书中提出一个乐趣的题目:「假设一对兔子成配偶后,在二个月时便可以生下一对(一雌一雄)兔子。以后,每过足一个月可以生下另一对兔子,如果每只兔子都能健康存活,一年之后,会有多少对兔子呢?」 
第1个月:只有一对兔子a。 
第2个月:仍只一对兔子a。 
第3个月:a生下一对兔子b,共有2对兔子。 
第4个月:a又生下一对兔子c,加上一对兔子b,共有3对兔子。 
第5个月:a又生下一对兔子d,而这对兔子b也生下一对兔子e,加上一对兔子c,共有5对兔子。 
第6个月:a又生下一对兔子f,而这对兔子c也生下一对兔子g,同时这对兔子b也生下一对兔子h,加上一对兔子d和一对兔子e,共有8对兔子。 
如此下去,每个月兔子的成对个数分别是1,1,2,3,5,8,13,21,.......。这数列我们称之为斐波拉契数列。 如果斐波拉契数列的第n项以fn表示,则f(n+1) = f(n)+(n-1)
package 经典编程题;
/**
 * 2018.07.15
 * @author PC
 *问题:有一对兔子,从出生后第三个月起每个月都生一对小兔子,小兔子长到第三个月以后每个月又生一对兔子。
 *假如兔子都不死,问每个月的兔子总数是多少?
 */
public class 兔子生殖问题 {
	
	//这是一个斐波拉契数列问题
	public static void sumRabbit(int M){
		
		System.out.println("第" + 1 + "个月的兔子总数为:" + 2);
		System.out.println("第" + 2 + "个月的兔子总数为:" + 2);
		
		int rab1 = 1;  //rab1是第(n-1)个月兔子的总对数
		int rab2 = 1;  //rab2是第(n)个月兔子的总对数
		int rab;       //rab为临时变量
		
		for(int i=3; i<=M; i++){
			//斐波拉契数列: f(n+1) = f(n)+(n-1)
			rab = rab2;   
			rab2 = rab1 + rab2;
			rab1 = rab;   
			System.out.println("第" + i + "个月的兔子总数为:" + 2*rab2);
		}
	}
	
	//测试
	public static void main(String[] args){
		
		sumRabbit(10);
		
	}
}

运行结果:


总结:对于这类题目应该动手将每个月的兔子数都列出来,根据数列去找规律,不能一直把目光放在兔子身上,本质是找数列的规律。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值