首先介紹斐波那契數列,斐波那契數列的排列是:1,1,2,3,5,8,13,21,34,55,89,144……
依次類推下去,你會發現,它後乙個數等於前面兩個數的和。在這個數列中的數字,就被稱為斐波那契數。
如果要找出其中任意乙個數,可以用下面兩種演算法解決 ;
用遞迴法
#define _crt_secure_no_deprecate
#include
int fib(int
x)int main()
非遞迴(迭代)
總結1.遞迴法。演算法**量小,程式簡潔。但是遞迴需要由於不斷呼叫函式自身,因此需要不斷的建立棧幀,如果是n的值比較小,還可以,一旦n的數值較大,就會耗費大量時間,同時很容易造成棧溢位,時間,空間都很高。其次,如果演算法邏輯不清晰,遞迴函式很難寫,初學者建議少用。如果個人習慣偏愛遞迴,建議使用static物件替代nonstatic區域性物件,不僅可以減少每次遞迴呼叫和返回時產生和釋放ninstatic物件的開放,而且static還可以儲存遞迴呼叫的中間狀態,並用可為各個呼叫層所訪問。減少bug的出現機率。
2. 迭代法。**好寫,由於是用迴圈解決問題,不需要頻繁呼叫函式,所以時間,空間成本相比遞迴要輕鬆很多。基本只要遞迴可以解決的問題,迭代都可以解決,(當然排除特殊情況,如漢羅塔的程式編寫)。一般情況,首選迭代。
3. vs2013編譯錯誤:
遞迴與非遞迴演算法比較:
求第n個斐波那契數
斐波那契數指 1 1 2 3 5 8 13 21.前兩個數是1 1,從第3個數開始該數等於前兩個數之和。1.用遞迴的方法求第n個斐波那契數 但我們發現有問題,當就算第45個斐波那契數時,特別耗費時間,許久沒有結果。這是為什麼呢?我們發現fib函式在呼叫過程中有很多重複的計算,如當計算fib 35 時...
第N個泰波拉契數
題目描述 泰波那契序列 tn 定義如下 t0 0,t1 1,t2 1,且在 n 0 的條件下 tn 3 tn tn 1 tn 2 給你整數 n,請返回第 n 個泰波那契數 tn 的值。輸入 n 4 輸出 4 解釋 t 3 0 1 1 2 t 4 1 1 2 4 示例 2 輸入 n 25 輸出 138...
求出第N個斐波那契數
一 知識普及 神魔是斐波那契數列 斐波那契數列 fibonacci sequence 又稱 分割 數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波納契數...