IO流_不死神兔問題案例
阿新 • • 發佈:2019-01-08
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); } } }