斐波那契數列

2021-10-10 17:23:45 字數 1806 閱讀 3880

斐波那契數列(fibonacci sequence),又稱**分割數列、因數學家萊昂納多·斐波那契(leonardoda fibonacci)以兔子繁殖為例子而引入,故又稱為「兔子數列」,指的是這樣乙個數列:1、1、2、3、5、8、13、21、34…

此為第一種方法,用迴圈來解決這個問題,**如下:

public

static

intforfibonacci

(int n)

//定義a、b和sum用來接收值

int a=1;

int b=1;

int sum=0;

//利用for迴圈進行累加

for(

int i=

2;i)//返回sum即為所要求的第n位數的總和

return sum;

}

可以看出如上的**雖然可以求出每乙個n所對應的斐波那契數列的值,但時**相對較為繁瑣,不夠簡潔。

此時我們可以利用迭代的方式來進行對**的簡潔化

迭代的三要素:

1.找到臨界點

2.滿足臨界點的解決辦法

3.提取相同的邏輯

public

static

intiterationfibonacci

(int n)

return

iterationfibonacci

(n-1)+

iterationfibonacci

(n-2);

}

如上,**相比利用迴圈時簡潔不少,但是在計算過程中還是有許多的重複項被計算。例如:

如果我們想求的是f(5);由於f(2)=f(1)=1,故求值到f(2)和f(1)出現即可。

f(5)=f(4)+f(3)展開計算f(4)和f(3)

即又需要計算f(4)=f(3)+f(2)和f(3)=f(2)+f(1)繼續展開計算f(3)

f(3)=f(2)+f(1)

此時可以看出f(3)被展開計算了兩次,如果n足夠大,那麼被重複計算的數就越來越多,因此需要對該**進行優化

public

static

intoptimizefibonacci

(int first,

int second,

int n)

return

optimizefibonacci

(second,first+second,n-1)

;}

現有斐波那契數列:1 1 2 3 5 8 13 21 34

此時定義了兩個值,first和second

要計算第7位的斐波那契數值

這時n=7,first=1,second=1,

此時假設n作為第6位置時,(實際不變),此時first=1,second=2

繼續假設n作為第5位置時,(實際不變),此時first=2,second=3

繼續假設n作為第4位置時,(實際不變),此時first=3,second=5

繼續假設n作為第3位置時,(實際不變),此時first=5,second=8

繼續假設n作為第2位置時,此時first=8,second=13

繼續假設n作為第1位置時,此時first=13,second=21

結果返回:

當n=1時返回first的值就為所求的值

當n=2時返回second的值就為所求的值

當n=3時返回(first+second)的值就為所求的值

(故**中,當n=3時直接可以得到所要求得得斐波那契數值)

優化後的**就不存在重複計算,依舊簡潔。

斐波那契數列 斐波那契數列python實現

斐波那契數列 fibonacci sequence 又稱 分割數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波納契數列以如下被以遞推的方法定義 f 1 ...

迴圈斐波那契數列 斐波那契數列應用

什麼是斐波那契數列 斐波那契數列指的是這樣乙個數列 1,1,2,3,5,8,13,21,34,55,89,144 這個數列從第3項開始,每一項都等於前兩項之和 台階問題 有一段樓梯有10級台階,規定每一步只能跨一級或兩級,要登上第10級台階有幾種不同的走法?這就是乙個斐波那契數列 登上第一級台階有一...

斐波那契數列

1 題目描述 大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項。斐波那契數列的定義如下 輸入 輸入可能包含多個測試樣例,對於每個測試案例,輸入包括乙個整數n 1 n 70 輸出 對應每個測試案例,輸出第n項斐波那契數列的值。2 這是九度上的乙個題,要求時間限制1秒,整數的...