题目:
古典问题:有一对兔子,从出生后第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);
}
}