1. 程式人生 > >IO流_不死神兔問題案例

IO流_不死神兔問題案例

package cn.itcast_02;

/*
 * 有一對兔子,從出生後第3個月起每個月生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子不死,問第二十個月的兔子對數是多少?
 * 分析:我們要想辦法找規律
 * 			兔子對數
 * 第一個月:	1
 * 第二個月:	1
 * 第三個月:	2
 * 第四個月:	3
 * 第五個月:	5
 * 第六個月:	8
 * ...
 * 
 * 由此可見兔子的物件資料是:
 * 		1,1,2,3,5,8...
 * 規則:
 * 		A:從第三項開始,每一項是前兩項之程
 * 		B:而且說明前兩項是已知的
 * 如和實現這個程式呢?
 * 		A:陣列實現
 * 		B:變數的變化實現
 * 		C:遞迴實現
 * 
 * 假如相鄰的兩個月的兔子對數是a,b
 * 第一個相鄰的資料:a=1,b=1
 * 第二個相鄰的資料:a=1,b=2
 * 第三個相鄰的資料:a=2,b=3
 * 第四個相鄰的資料:a=3,b=5
 * 看到了:下一次的a是以前的b,下一次的b是以前的a+b;
 */
public class DiGuiDemo2 {
	public static void main(String[] args) {
		// 定義一個數組物件
		long[] num = new long[20];
		num[0] = 1;
		num[1] = 1;
		// num[2] = 2;
		// num[3] = 3;
		// ...;
		for (int x = 2; x < 20; x++) {
			num[x] = num[x - 1] + num[x - 2];
		}
		System.out.println(num[19]);
		System.out.println("-------------");

		int a = 1;
		int b = 1;
		for (int x = 0; x < 18; x++) {
			int temp = a;
			a = b;
			b = temp + b;
		}
		System.out.println(b);
		System.out.println("-------------");
		
		System.out.println(fib(20));
	}

	/*
	 * 方法:
	 * 		返回值型別:int
	 * 		引數列表:int n
	 * 出口條件:
	 * 		第一個月是1,第二個月是1
	 * 規律:
	 * 		從第三個月開始,每個月是前兩個月之和
	 * 		
	 */
	public static int fib(int n) {
		if (n == 1 || n == 2) {
			return 1;
		} else {
			return fib(n - 2) + fib(n - 1);
		}
	}
}