Java基础知识强化之IO流笔记13:递归之不死神兔问题(斐波那契数列)
生活随笔
收集整理的這篇文章主要介紹了
Java基础知识强化之IO流笔记13:递归之不死神兔问题(斐波那契数列)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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 }運行結果如下:
轉載于:https://www.cnblogs.com/hebao0514/p/4850243.html
總結
以上是生活随笔為你收集整理的Java基础知识强化之IO流笔记13:递归之不死神兔问题(斐波那契数列)的全部內容,希望文章能夠幫你解決所遇到的問題。