斐波那契數列的實現(java)

2021-07-30 11:30:31 字數 1011 閱讀 3927

題目:大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項。n<=39

解題思路:

首先一下子想到的就是遞迴。但是這是通過不了的,因為遞迴占用的空間超過了限定的空間。

遞迴版本:

public int fibonacci(int n) 

if(n==1)else if(n>=2 && n<=39)

return result;

}

n=4,看看程式怎麼跑的:

fibonacci(4) = fibonacci(3) + fibonacci(2);

= fibonacci(2) + fibonacci(1) + fibonacci(1) + fibonacci(0);

= fibonacci(1) + fibonacci(0) + fibonacci(1) + fibonacci(1) + fibonacci(0);

由於我們的**並沒有記錄fibonacci(1)和fibonacci(0)的結果,對於程式來說它每次遞迴都是未知的,因此光是n=4時f(1)就重複計算了3次之多。

所以,我們應該用迭代代替遞迴。

然後,我就想到了,把得到的值存到陣列中,然後計算的時候取前兩個相加就可以了,這樣就沒有重複多餘的運算了。這就用到了動態規劃的思想。將大問題化成小問題再求解相加。

public int fibonacci(int n) 

else if(n>=2 && n<=39)

return array.get(n);

}

但是,這個**執行的空間多出了array.size。相比於前乙個遞迴**,可以說是用空間換時間。

所以,下面這個**是參考了牛客網上邊一些人的**,得到的。相比於第二版**,減少了很多空間,只用了2個變數就解決了。

public int fibonacci(int n) 

return f1;

}

JAVA實現 斐波那契數列

斐波那契數列是我在初中的數學課接觸到的,當時唯一對這個感興趣的是他的名字,因為一直在想是誰起了乙個這麼彆扭的名字 後來無知的我才發現原來是這麼一回事 斐波那契數列 是1202年萊昂納多 斐波那契提出的,當時只是為了解決乙個兔子繁殖的問題,後來再世人的研究與拓展,發現他有非常廣泛的應用。下面我們用程式...

java實現斐波那契數列

斐波納契數列 又稱 分割數列,指的是這樣乙個數列 1 1 2 3 5 8 13 21 在數學上,斐波納契數列以如下被以遞迴的方法定義 f0 0,f1 1,fn f n 1 f n 2 n 2,n n public class fibonacci 遞迴實現方式 public static int fi...

java實現斐波那契數列

如下 fibonacci 為 1200 年代的歐洲數學家,在他的著作中曾經提到 若有乙隻免子每個月生乙隻 小免子,乙個月後小免子也開始生產。起初只有乙隻免子,乙個月後就有兩隻免子,二個月後有三 只免子,三個月後有五隻免子 小免子投入生產 這就是 fibonacci 數列,一般習慣稱之為費氏數列,例如...