斐波那契數列:
0、1、1、2、3、5、8、13、21、34
遞推的方法定義:f(0)=0,f(1)=1, f(n)=f(n - 1)+f(n - 2)(n ≥ 2,n ∈ n*)
# -*- coding: utf-8 -*-
"""created on wed mar 3 10:58:27 2021
@author: dujidan
"""from collections import defaultdict
# 遞迴解法
deffib
(n):
if n <1:
return
0if n ==
1or n ==2:
return
1return fib(n -1)
+ fib(n -2)
# 帶備忘錄的遞迴解法
deffib
(n):
if n <1:
return
0 meno_dict =
return helper(meno_dict, n)
defhelper
(meno_dict, n)
:if n ==
1or n ==2:
return
1if n in meno_dict.keys():
return meno_dict[n]
else
: meno_dict[n]
= helper(meno_dict, n -1)
+ helper(meno_dict, n -2)
return meno_dict[n]
# 動態規劃一般都脫離了遞迴, 由迴圈迭代完成計算
# 陣列迭代解法 動態規劃
deffib
(n):
dp_dict = defaultdict(
int)
dp_dict[1]
=1dp_dict[2]
=1for i in
range(3
, n+1)
: dp_dict[i]
= dp_dict[i -1]
+ dp_dict[i -2]
return dp_dict[n]
# 當前狀態只和之前的兩個狀態有關, 其實並不需要那麼個 dp table 來儲存所有的狀態, 只要想辦法儲存之前的兩個狀態
# 所以, 可以進一步優化, 把空間複雜度降為 o(1)
deffib
(n):
if n ==
1or n ==2:
return
1 prev =
1; curr =
1for i in
range(3
, n+1)
: sum_num = prev + curr
prev = curr
curr = sum_num
return curr
print
(fib(
200)
)
斐波那契數列解法
方法一 常規解法 def demo month 定義變數 a,b分別表示一月和二月的數目 a 0 a為第乙個數值 b 1 b為第二個數值 定義乙個計數器 i 0 while i month 列印每次的數值 print a a,b b,a b i 1 nume demo 3 方法二 函式的遞迴 def...
斐波那契數列解法
1 概念 在數學上,費波那契數列是以遞迴的方法來定義 f0 0 f1 1 fn fn 1 fn 2 n 2 用文字來說,就是費波那契數列由0和1開始,之後的費波那契係數就是由之前的兩數相加而得出。首幾個費波那契係數是 0,1,1,2,3,5,8,13,21,34,55,89,144,233 oeis...
斐波那契數列的遞迴與非遞迴解法
lintcode第366題 斐波納契數列 中文english 查詢斐波納契數列中第 n 個數。所謂的斐波納契數列是指 前2個數是 0 和 1 第 i 個數是第 i 1 個數和第i 2 個數的和。斐波納契數列的前10個數字是 0,1,1,2,3,5,8,13,21,34 樣例 樣例 1 輸入 1 輸出...