package cn.itcast_02;/* * 有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月生一對(duì)兔子,小兔子長(zhǎng)到第三個(gè)月后每個(gè)月又生一對(duì)兔子,假如兔子不死,問(wèn)第二十個(gè)月的兔子對(duì)數(shù)是多少? * 分析:我們要想辦法找規(guī)律 * 兔子對(duì)數(shù) * 第一個(gè)月: 1 * 第二個(gè)月: 1 * 第三個(gè)月: 2 * 第四個(gè)月: 3 * 第五個(gè)月: 5 * 第六個(gè)月: 8 * ... * * 由此可見兔子的對(duì)象數(shù)據(jù)是: * 1,1,2,3,5,8... * 規(guī)則: * A:從第三項(xiàng)開始,每一項(xiàng)是前兩項(xiàng)之程 * B:而且說(shuō)明前兩項(xiàng)是已知的 * 如和實(shí)現(xiàn)這個(gè)程序呢? * A:數(shù)組實(shí)現(xiàn) * B:變量的變化實(shí)現(xiàn) * C:遞歸實(shí)現(xiàn) * * 假如相鄰的兩個(gè)月的兔子對(duì)數(shù)是a,b * 第一個(gè)相鄰的數(shù)據(jù):a=1,b=1 * 第二個(gè)相鄰的數(shù)據(jù):a=1,b=2 * 第三個(gè)相鄰的數(shù)據(jù):a=2,b=3 * 第四個(gè)相鄰的數(shù)據(jù):a=3,b=5 * 看到了:下一次的a是以前的b,下一次的b是以前的a+b; */public class DiGuiDemo2 { public static void main(String[] args) { // 定義一個(gè)數(shù)組對(duì)象 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 * 參數(shù)列表:int n * 出口條件: * 第一個(gè)月是1,第二個(gè)月是1 * 規(guī)律: * 從第三個(gè)月開始,每個(gè)月是前兩個(gè)月之和 * */ public static int fib(int n) { if (n == 1 || n == 2) { return 1; } else { return fib(n - 2) + fib(n - 1); } }}
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注