1.这个问题是如下的:
有一对兔子,从出生后第3个月起,每个月都生一对兔子,小兔子长到第3个月又生一对兔子,加入兔子都不死,问第20个月兔子的对数?
分析:我们找规律
兔子对数
第1个月: 1
第2个月: 1
第3个月: 2
第4个月: 3
第5个月: 5
第6个月: 8
……
由此可见兔子的对象数据是:
1,1,2,3,5,8,……
• n=1或者n=2,result=1;
• n>=3,result=fun(n-1)+fun(n-2);
2. 代码实现:
1 package com.himi.diguidemo; 2 3 4 /** 5 * 6 *有一对兔子,从出生后第3个月起,每个月都生一对兔子,小兔子长到第3个月又生一对兔子,加入兔子都不死,问第20个月兔子的 对数? 7 *分析:我们找规律 8 * 兔子对数 9 *第1个月: 1 10 *第2个月: 1 11 *第3个月: 2 12 *第4个月: 3 13 *第5个月: 5 14 *第6个月: 8 15 *…… 16 *由此可见兔子的对象数据是: 17 * 1,1,2,3,5,8,…… 18 * 19 * 如何实现这个程序呢? 20 * A:数组实现 21 * B:变量的变化实现 22 * 假如相邻的两个月的兔子对数为a,b 23 * 第1个月: a=1,b=1 24 * 第2个月: a=1,b=2 25 * 第3个月: a=2,b=3 26 * 第4个月: a=3,b=5 27 * 看到了:下一次的a是以前的b,下一次的b是以前的a+b 28 * 29 * C:递归实现 30 */ 31 public class DiGuiDemo2 { 32 33 public static void main(String[] args) { 34 //数组实现 35 int[] arr = new int[20]; 36 arr[0] = 1; 37 arr[1] = 1; 38 for(int i =2; i<=arr.length-1; i++) { 39 arr[i] = arr[i-1]+arr[i-2]; 40 } 41 System.out.println("数组实现---第20月兔子的对数:"+arr[19]); 42 43 System.out.println("============================="); 44 //变量的变化实现 45 int a=1; 46 int b=1; 47 for(int i=0; i<18; i++){ 48 int temp =a; //保存a的初试值 49 a = b; //这里的a发生了变化,而下面需要使用到a的初始值,所以上面定义了int temp = a; 50 b = temp+b; 51 } 52 System.out.println("变量的变化实现---第20月兔子的对数:"+b); 53 54 System.out.println("============================="); 55 56 //递归实现 57 System.out.println("递归实现---第20月兔子的对数:"+func(20)); 58 59 } 60 61 public static int func(int n) { 62 if(n==1 || n==2) { 63 return 1; 64 } 65 66 return func(n-1)+func(n-2); 67 } 68 69 }
运行结果如下: