用非遞迴,遞迴和迭代求第n個斐波那契數的優劣對比

2021-09-25 10:04:36 字數 1172 閱讀 7683

#define _crt_secure_no_warnings 1

/*author: 逺哥*/

#include #include // 非遞迴,遞迴以及迭代分別實現求第n個斐波那契數。

//非遞迴

int fibonacci1(int n)

; arr[0] = 1;

arr[1] = 1;

int i = 0;

for (i = 2; i < n; i++)

return arr[n-1];

}//遞迴

int fibonacci2(int n) //n 3

//迭代求斐波那契數

int fibonacci3(int n) //n 3

return c;

}int main()

//分析一下遞迴求斐波那契數的缺陷,如下

//假設要求第7項

//fib(7)

//fib(6) + fib(5)

//fib(5) + fib(4) + fib(4) + fib(3)

//fib(4) + fib(3) + fib(3) + fib(2) + fib(3) + fib(2) + fib(2) + fib(1)

//fib(3) + fib(2) + fib(2) + fib(1) + fib(2) + fib(1) …… + fib(2) + fib(1)

//fib(2) + fib(1) ……

//由以上例子展開可知:

//求第n個斐波那契數得計算 2^1 + 2^2 + 2 ^3 + 2 ^4 + …… + 2 ^(n-2)發現表示式是乙個等比數列,對其進行求和得:

//等比數列求和公式:a1(1-q^n)/(1 - q)

//得出 2*(1-2^(n-2))/(1-2) = 2^(n-1)-2

//此時可得出遞迴求第n項斐波那契數的時間複雜度為 o(2^n)

//由於遞迴求斐波那契數列會不斷地大量重複運算大大降低了運算效率

//當求的數較大時效率就極地假設要求第33個斐波那契數那麼就得運算2^32==42億多個數,對空間消耗也極大

//用迭代的方法求斐波那契數列即使求第50個也才運算48次極大的提高了效率也節約了很多(空間)記憶體成本

//迭代的方法求第n個數只需要求n-2次,時間複雜度是o(n)

遞迴和非遞迴分別實現求第n個斐波那契數

在數學上,斐波納契數列以如下被以遞迴的方法定義 f 0 0,f 1 1,f n f n 1 f n 2 n 2,n n include include int fib int n else int main 一直以來很多c語言教科書在講遞迴函式的時候總會拿斐波那契數列作為例子。但是這不意味著fibo...

遞迴和非遞迴分別實現求第n個斐波那契數

斐波那契數列的排列是 1,1,2,3,5,8,13,21,34,55,89,144 在c語言中,可以使用遞迴和非遞迴的方法實現求第n個斐波那契數。1 遞迴方法 include includeint fib int n int main 可以看出遞迴方法十分簡潔明瞭,但該問題使用遞迴存在缺陷,如果n值...

C語言 遞迴和非遞迴分別實現求第n個斐波那契數

問題描述 使用遞迴和非遞迴的方法分別實現求第n個斐波那契數,那麼什麼是斐波那契數。斐波那契數列指的是這樣乙個數列 1 1 2 3 5 8 13 21,後面的每乙個數是前面兩個數的和。解題思路一 遞迴實現 參考 define crt secure no warnings include include...