C語言中經典演算法 斐波那契數列的幾種演算法

2021-10-06 09:42:32 字數 1185 閱讀 7197

斐波那契數列的遞推公式:

我們嘗試計算斐波那契數列的第n項並輸出。

1、遞迴法

#include

intfib

(int m)

else

}int

main()

說明:在主調函式中,只寫入輸入輸出,在fib()函式中實現計算的功能。

實參n把值傳遞給形參m,函式fib()開始分配記憶體空間。判斷:當m>=3時,返回fib(m-1)+fib(m-2);否則返回1;

例:n=6時 return fib(5)+fib(4); 怎麼知道fib(5)和fib(4)的值呢?

fib(5)=fib(4)+fib(3);fib(4)=fib(3)+fib(2);fib(3)=fib(2)+fib(1);

ok!通過遞推我們得到了fib(3)的值,這樣,fib(4)、fib(5)的值也就得到了。

n為其他值時類似。

2、迭代法

#include

intfib

(int m)

return aw;

}int

main()

說明:主調函式同上,這一次在fib()裡使用迭代的方法計算該數列。

通過遞推公式我們不難看出,

設n=6,

fib(5)=fib(4)+fib(3);fib(4)=fib(3)+fib(2);fib(3)=fib(2)+fib(1);

倒過來看,可以將斐波那契數理解為前數的加和等於後數,則從第一項開始推起,每次向前疊加乙個數,直到找到需要的項數。

while

(m>=2)

3、陣列法

與前兩種方法類似,都是根據遞推公式自上而下或自下而上遞推出斐波那契數。引入陣列的好處時,可以將計算出的數儲存起來,方便在其他地方直接列印或呼叫。

#include

intfib

(int m)

;for

(i=2

;i<=m;i++

)//注意避免陣列越界

return bank[m];}

intmain()

說明:陣列的做法顯然更占用記憶體,而且如果要計算非常大的斐波那契數列的時候,越界就很難避免。

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 ...