大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。 n<=39


斐波那契數列的概念(下面的知識點來自百度百科)

斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數列”,

指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……在數學上,斐波納契數列以如下被以遞推的方法定義:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)

在現代物理、准晶體結構、化學等領域,斐波納契數列都有直接的應用,為此,美國數學會從1963年起出版了以《斐波納契數列季刊》為名的一份數學雜志,用於專門刊載這方面的研究成果。

話不多說下面開始給大家上菜:

方法1,毋容置疑,這道題用遞歸是多么的完美呀。

java中的遞歸的代碼1:

public class Solution {
public int Fibonacci(int n) {
if(n==0)return 0;
if(n==1)return 1;
if(n<0)return n;
return Fibonacci(n-1) + Fibonacci(n-2);
}
}

但是這樣同時帶來的時間和空間的花費是非常的大的。

java中的遞歸的代碼2:

public class Solution {
     public int Fibonacci( int n) {
         return Fibonacci(n, 0 , 1 );
     }      
     private static int Fibonacci( int n, int acc1, int acc2){
         if (n== 0 ) return 0 ;
         if (n== 1 ) return acc2;
         else     return Fibonacci(n - 1 , acc2, acc1 + acc2);     
     }
}

在這個里面用到的遞歸,是將自己的程序進行分離出去到了另外的一個子函數中去。這樣的做法也是非常的nice的。

這里的遞歸少了一層,所以。還算是比較的不錯吧,時間大大相對於上一個減少了很多,但是空間上面還是花費了非常的多的時間。所以也是不是特別的可取。

下面的解答是要用循環進行解答。循環進行解答,在這個里面大大的縮短了時間和空間。

public class Solution {
public int Fibonacci(int n) {
int pre1=0;
int pre2=1;
int sum =0;
if(n==0)return 0;
if(n==1)return 1;
if(n<0)return n;
if(n>1)
{
for(int i=1;i<n;i++){
sum=pre1+pre2;
pre1=pre2;
pre2=sum;
}
}
return pre2;
}
}

喜歡的小伙伴,歡迎留言哦。沒有最全,只有更全。如果你有更加好的方法的話,歡迎在我的博客下面進行留言。這樣我們互相成就。但是謝絕抄襲。如果轉載附上我的地址。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM