C語言資料結構遞迴之斐波那契數列

2022-10-04 00:18:17 字數 1178 閱讀 8960

c語言資料結構遞迴之斐波那契數列

因為自己對遞迴還是不太熟練,於是做poj1753的時候就很吃力,就是翻棋子直到棋盤上所caextekl有棋子的顏色一樣為止,求最少翻多少次,方法是列舉遞迴。然後就打算先做另一道遞迴的題(從陣列中取出n個元素的組合),但是同樣在遞迴的問題上不太理解。好吧,於是複習cpp,在第229頁的時候,看到了斐波那契數列,回想起之前做過的一道題目,發現可以用遞迴的方法來做。於是決定優化一下之前的**。

以下這段摘自《c primer plus》

斐波那契數列的定義如下:第乙個和第二個數字都是1,而後續的每個數字是其前兩個數字之和,例如,數列中前幾個數字是1,1,2,3,5,8和13。…下面我們建立乙個函式,它接受乙個正整數n作為引數,返回相應的斐波那契數值。

首先,關於遞迴深度,遞迴提供了乙個簡單的定義。如果呼叫fibonacci(),當n為1或2時fibonacci(n)應返回1;對於其他數值應返回fibonacci(n-1)+fibonacci(n-2);

long fibonacci(n)

然後是兔子總數問題。

有一對兔子,從出生後第三個月起每個月都生一對兔子,小兔子長到第三個月後又生一對兔子,假如兔子都不死,每個月兔子對數為多少?

思考這道題的時候,如果你簡單的推算一下,會發現兔子每個月的對數就是斐波那契數列。

第程式設計客棧乙個月:1對;

第二個月:1對;

第三個月:2對;

第四個月:3對:

第五個月:5對:

第六個月:8對;

…… 我之前做這道題的時候,覺得思路很簡單,就是從第三個月起,求每個月的兔子數時,只要把這個月的前兩個月總數相加。

這是我之前的**,用f1和f2表示月。:

#include

int main()

if (month %2 == 0)

if (month %2 == 1)

} return 0;

}其實這個**離遞迴就差一步,很接近了。但是我當時完全沒有想到。

這是我重新修改之後的**:

#include

long fibonacci(n)

int main()

只是很簡單的修改,但是**就整潔易懂了很多,也學到了新內容。

工欲善其事必先利其器,共勉。

本文標題: c語言資料結構遞迴之斐波那契數列

本文位址:

斐波那契數列之遞迴

斐波那契數列,又稱 分割數列,指的是這樣乙個數列 0 1 1 2 3 5 8 13 21 在數學上,斐波納契數列以如下被以遞迴的方法定義 f0 0,f1 1,fn f n 1 f n 2 n 2,n n 斐波那契數列最初是為了計算兔子的出生數量而出現的,所以也叫 兔子數列 遞迴的本質其實程式的方法自...

用遞迴求斐波那契數

斐波那契數是第乙個數和第二個數都為1,從第三個數開始,後面的是是前面相鄰兩個數的和。定義的函式如下所示 int fib int m if語句為了確定第一位和第二位都為1,完整的 如下所示 include include int fib int m int main printf n printf n...

斐波那契數 c 語言實現

斐波那契數列,又稱 數列,指的是這樣乙個數列 1 1 2 3 5 8 13 21 在數學上,斐波納契數列以如下被以遞迴的方法定義 f 1 1,f 2 1,f n f n 1 f n 2 n 2,n n 第一種實現方法可以通過其定義得知 遞迴 int fib2 int num 第二種方法 迭代 int...