斐波拉契數列(簡單思路)

2021-09-10 01:33:34 字數 1001 閱讀 2865

斐波那契數,通常用 f(n) 表示,形成的序列稱為斐波那契數列。該數列由 0 和 1 開始,後面的每一項數字都是前面兩項數字的和。也就是:
f(0) = 0, f(1) = 1

f(n) = f(n - 1) + f(n - 2)

給定 n,計算 f(n)。(0<=n<=30)

leetcode-509

我們需要求f(n),則只需求f(n-1)和f(n-2),然後相加;而要知道f(n-1)就需要知道f(n-2)和f(n-3)的值,以此類推,知道f(0) = 0,f(1) = 1

根據上面的分析,我們就可以遞迴的思路,逐層求解。

·明確遞迴出口:當n == 0 || n == 1時,return n

·每次呼叫函式本身去求解f(n-1),f(n-2)

**示例(c語言):

int fib

(int n

)

遞迴程式是非常簡潔的,但程式在執行時,會呼叫棧,是十分耗時的;這樣我們就像著可以使用輔助空間來儲存f(n)的值,直接使用,從而節省時間。

因為n的取值範圍是比較小的,所以我們可以使用大小為31的陣列(0~30,即31個值):

int fib

(int n);

fboarray[0]

=0; fboarray[1]

=1;while

(i <=n)

return fboarray[i-1]

;}

我們可以看到,這種方法的空間複雜度是o(n),但我們在計算時會發現:我們計算f(n)的值,只需要知道f(n-1)和f(n-2)的值,那麼我們只需要不斷更新記下前兩個值,就可以了。

那麼就可以做下面的優化:

int fib

(int n

)return cur;

}

時間複雜度為o(1)

(不足之處還望指正,謝謝)

斐波拉契數列

斐波拉契數列 1 1 2 3 5 8 13 21 34.其中每乙個數字都是前兩個數字的和。遞迴計算 long fibonacci int n 非遞迴計算 long fibonacci int n return result 這個函式的遞迴實現使用了雙重遞迴 double recursion 函式對本...

斐波拉契數列

編寫彙編程序列印1 1000的斐波拉契數列 原始碼assume cs code,ss stack,ds data data segment fibo dw 0,1,64 dup 0 str db the fibo list is 0ah,0dh,data ends stack segment db ...

斐波拉契數列

斐波拉契數列 這個數列從第三項開始,每一項都等於前兩項之和。已知斐波拉契數列的前兩項都是1,我們定義求斐波拉契數列的第n項 n 50 的函式為fbnq,請補充完成對fbnq函式的定義。輸入格式 共一行,為乙個正整數。輸出格式 共一行,為乙個正整數。輸入樣例 7輸出樣例 13 斐波拉契數列 def f...