兔子问题

 题目:

古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,

假如兔子都不死,问每个月的兔子总数为多少?

分析:


 *第一个月1对兔子,
 *第二个月1对兔子,
 *第三个月2对兔子(老兔子生的1对小兔子),
 *4月(3对)(老兔子又生了1对小兔子。3月的变为中兔子了,把之前2对的加起来,一共3对),
 *5月(5对)(1月的老兔子生了一对,3月的老兔子生了一对,再把之前3对的加起来,一共5对)
 *6月(8对)由上方可找到规律,
该数等于前两个数之和。( n = (n-1)+(n-2) )可以采用递归调用进行计算
 *
 *
 *因为计算的是兔子的对数,所以最后兔子的总数=兔子的对数x2、

package com.leike.rabbit.demo;

import java.util.Scanner;

/**
 * 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,
		假如兔子都不死,问每个月的兔子总数为多少?
 * 
 * 
 *分析:
 *第一个月1对兔子,
 *第二个月1对兔子,
 *第三个月2对兔子(老兔子生的1对小兔子),
 *4月(3对)(老兔子又生了1对小兔子。3月的变为中兔子了,把之前2对的加起来,一共3对),
 *5月(5对)(1月的老兔子生了一对,3月的老兔子生了一对,再把之前3对的加起来,一共5对)
 *6月(8对)由上方可找到规律,改数等于前两个数之和。( n = (n-1)+(n-2) )可以采用递归调用进行计算
 *
 *
 *因为计算的是兔子的对数,所以最后兔子的总数=兔子的对数x2、
 * @author pc
 *
 */
public class Rabbit{

	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		
		while(true){//一直循环	
		System.out.println("请输入兔子的月份:");
		int i = sc.nextInt();
		if(i == -1)//当i等于-1时,用break,退出本次循环
			break;
		
		if(i<=0){    //给定条件,对错误信息进行过滤
			System.out.println("输入有误,请输入正确的正整数!!!");
		}else{
			System.out.println("第"+i+"个月兔子为"+number(i)+"对");
			System.out.println("第"+i+"个月兔子的数量为"+2*number(i));
			}
		}
		
		System.out.println("程序终止,已退出");

	}

	
	//计算第i个月后兔子的总数量。
	public static int number(int i){
		
		if(i==1 || i==2)
			return 1;
		else
			
		return number(i-1)+number(i-2);
	}
	
}

猜你喜欢

转载自blog.csdn.net/qq_34266804/article/details/83215808