古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
解法一:(数组)
public class rabbit { public static void main(String[] args) { // TODO Auto-generated method stub int a[]=new int[24];//定义一个存放24个月的数组 a[0]=a[1]=1; for(int i=0;i<24;i++){ if(i==1||i==0) System.out.println("第"+(i+1)+"个月兔子的数量为"+1+"对"); else{ a[i]=a[i-1]+a[i-2]; System.out.println("第"+(i+1)+"个月兔子的数量为"+a[i]+"对"); } } } }
运行结果:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
第1个月兔子的数量为1对
第2个月兔子的数量为1对
第3个月兔子的数量为2对
第4个月兔子的数量为3对
第5个月兔子的数量为5对
第6个月兔子的数量为8对
第7个月兔子的数量为13对
第8个月兔子的数量为21对
第9个月兔子的数量为34对
第10个月兔子的数量为55对
第11个月兔子的数量为89对
第12个月兔子的数量为144对
第13个月兔子的数量为233对
第14个月兔子的数量为377对
第15个月兔子的数量为610对
第16个月兔子的数量为987对
第17个月兔子的数量为1597对
第18个月兔子的数量为2584对
第19个月兔子的数量为4181对
第20个月兔子的数量为6765对
第21个月兔子的数量为10946对
第22个月兔子的数量为17711对
第23个月兔子的数量为28657对
第24个月兔子的数量为46368对
解法二:(不用数组)
public class rabbit2 { public static void main(String[] args) { long f1,f2; f1=f2=1; for(int i=0;i<24;i=i+2){ if(i==0||i==1){ System.out.println("第1个月兔子的数量为:1对"); System.out.println("第2个月兔子的数量为:1对"); } else{ f1=f1+f2; f2=f1+f2; System.out.println("第"+(i+1)+"个月兔子的数量为"+f1+"对"); System.out.println("第"+(i+2)+"个月兔子的数量为"+f2+"对"); } } } }
解法三: 用迭代方法
import java.util.Scanner; public class rabbit3 { public static void main(String[] args) { Scanner in=new Scanner(System.in); System.out.println("您需要查询第几个月兔子数?"); int i=in.nextInt(); int n=rabbit1(i); System.out.println("第"+i+"个月兔子的数量为:"+n+"对"); } public static int rabbit1(int n){ if(n<=0){ System.out.println("输入错误,重新输入!您需要查询第几个月兔子数?"); return 0; } if(n==1||n==2) return 1; if(n>2) return rabbit1(n-1)+rabbit1(n-2); return rabbit1(n-1)+rabbit1(n-2); } }