1. 程式人生 > >利用斐波那契數列解決兔子數的演算法(java)

利用斐波那契數列解決兔子數的演算法(java)

今天看到一道演算法題,算了半天沒算出來,後來查了資料,原來這是一道關於斐波那契數列題目,題目是:

有 一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少對?)

我開始的思路是先把每個月的兔子數列出來

  1. f1 =1;
  2. f2 =1;
  3. f3 = f2+1=2;
  4. f4 = f3+1=3;
  5. f5 = f4+1+1=5;
  6. f6 = f5+1+1+1=8;
  7. f7 = f6+1+1+1+1+1=13
  8. …… (一直迴圈下去)

這樣的話規律就來了
1.f3 = f1+f2;
2.f4=f2+f3;
3.f5 =f3+f4;
……

從第三項起,每一項都等於前兩項的和;
實現兩數相加,然後就是前兩個數進行互換,然後我寫了那麼一段程式碼
public class Suanfa1{
public static void main(String [] args){
int f1 =1;
int f2=1;
int c; // 設一箇中間變數
int M=12;
for(int i =3;i<=M;i++){
c = f2;
f2= f1+f2;
f1=c; //對a.b值進行互換
System.out.println("第"+i+"個月的兔子數為:"+f2+"對");
}
}
}

執行結果如下:

第3個月的兔子數為:2對
第4個月的兔子數為:3對
第5個月的兔子數為:5對
第6個月的兔子數為:8對
第7個月的兔子數為:13對
第8個月的兔子數為:21對
第9個月的兔子數為:34對
第10個月的兔子數為:55對
第11個月的兔子數為:89對
第12個月的兔子數為:144

之後我舍友看了程式碼之後說程式碼可以更加簡化,然後他用瞭如下這個演算法把迴圈體內的運算式化成了只剩兩條,他的演算法是這樣的:

public class Suanfa1{
public static void  main(String [] args){
            int now =1
; int last =0; int M=12; // 設定時間為一年 for(int i =1;i<=M;i++){ System.out.println("第"+i+"個月的兔子數為:"+now+"對"); now+=last; last =now-last; } } }

執行結果如下:

第1個月的兔子數為:1對
第2個月的兔子數為:1對
第3個月的兔子數為:2對
第4個月的兔子數為:3對
第5個月的兔子數為:5對
第6個月的兔子數為:8對
第7個月的兔子數為:13對
第8個月的兔子數為:21對
第9個月的兔子數為:34對
第10個月的兔子數為:55對
第11個月的兔子數為:89對
第12個月的兔子數為:144