斐波那契數列(直接,分治,動規)C語言簡析

2021-10-16 16:30:21 字數 878 閱讀 1578

斐波那契數列指的是這樣乙個數列:0、1、1、2、3、5、8、13、21……滿足後一項等於前兩項之和,用公式表達:f(0)=0,f(1)=1, f(n)=f(n - 1)+f(n - 2)(n ≥ 2,n ∈ n*)。

接下來我們給出三種解決方法:

首先是直接求解法

#include

intmain()

printf

("%d"

,s);

return0;

}

在for迴圈之中,s的下一項等於s+a,a是s的前一項。a=b;b=s;是將當前的s值賦給a,使得下一次迴圈之中a的值是下一項s的前一項。從而直接計算出f(n)的值。

接著是分治法

#include

intf

(int n)

intmain()

這是比較常規的一種方法,直接寫出乙個函式,通過呼叫自身來實現計算,這種寫法更加直觀,可讀性強。但是此程式執行效率很低,當n的值較大時,函式被呼叫次數過多,會導致程式崩潰。

最後是採用動態規劃的方法

#include

int a[

1007]=

;intf(

int n)

intmain()

這種方法在分治的基礎上新增了乙個陣列來存放f(n)的值,每次返回的同時將返回值存入陣列,這樣的話下次使用時可以直接用陣列當中的值,程式就可以避免大量的重複計算,節省了很多時間。

對於return a[n]=1;表示a[n]=1;return a[n];其餘同理。

C 斐波那契數列

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

C 斐波那契數列

斐波那契數列 fibonacci sequence 又稱 分割數列,指的是這樣乙個數列 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 1.static int func int n i...

c 斐波那契數列

題目描述 faibonacci數列前幾項為 0,1,1,2,3,5,8,其規律是從第三項起,每項均等於前兩項之和。求前n項,並以每行5個數的格式輸出。輸入乙個正整數n 3 n 30 表示斐波那契數列的項數。輸出若干行,每行五個數,每個數使用10個位置輸出。樣例輸入 樣例輸出 0 1 1 2 3 5 ...