1.遞迴方式
寫法最簡潔,但是效率最低,會出現大量的重複計算,時間複雜度o(1.618^n),而且最深度1000
def
fib_sequence
(num)
:if num ==
1or num ==2:
return
1else
:return fib_sequence(num-2)
+fib_sequence(num-1)
user_input =
input
('請輸入乙個數字'
)print
('根據遞迴方式生成的結果為'
, fib_sequence(
int(user_input)
))
2.for迴圈
迭代主要思想為: 迴圈**中參與運算的變數同時是儲存結果的變數,最常見的迭代為遍歷列表
遞推法,就是遞增法,時間複雜度是 o(n),呈線性增長,如果資料量巨大,速度會越拖越慢
def
fib_sequence2
(num)
: a, b =0,
1for i in
range
(num-1)
: a, b = b, a+b
return b
user_input2 =
input
('請輸入乙個數字'
)print
('根據for迴圈後生成的結果為'
, fib_sequence2(
int(user_input2)
))
#while迴圈
def
fib_sequence3
(num)
: a, b, i =0,
1,0while
(i < num-1)
: a, b = b, a+b
i +=
1return b
user_input3 =
input
('請輸入乙個數字'
)print
('根據while迴圈後生成的結果為'
, fib_sequence3(
int(user_input3)
))
3.生成器
def
generator_fib
(num)
: a, b =0,
1while num >0:
a, b = b, a + b
num -=
1yield a
defgenerator_
(f):
while
true
:try
: x =
next
(f)except stopiteration as e:
print
('生成器最後的返回值是:'
, x)
break
f = generator_fib(8)
generator_(f)
user_input4 =
input
('請輸入乙個數字'
)print
(generator_fib(
int(user_input4)
))
4.矩陣
因為冪運算可以使用二分加速,所以矩陣法的時間複雜度為 o(log n)
用科學計算包numpy來實現矩陣法 o(log n)
import numpy
deffib_matrix
(n):
res =
pow(
(numpy.matrix([[
1,1]
,[1,
0]])
), n)
* numpy.matrix([[
1],[
0]])
return res[0]
[0]for i in
range(10
):print
(int
(fib_matrix(i)
), end=
' ')
#2 使用矩陣計算斐波那契數列
def
fibonacci_matrix_tool
(n):
matrix = numpy.matrix(
"1 1;1 0"
)# 返回是matrix型別
return
pow(matrix, n)
# pow函式速度快於 使用雙星好 **
deffibonacci_matrix
(n):
result_list =
for i in
range(0
, n):)
[0][
0])return result_list
#呼叫
fibonacci_matrix(
10)
斐波那契數列 斐波那契數列python實現
斐波那契數列 fibonacci sequence 又稱 分割數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波納契數列以如下被以遞推的方法定義 f 1 ...
斐波那契數列 python 實現
什麼?找規律找的不錯!其實我想說的是 斐波拉契數列!斐波那契數列 兔子數列.jpg 自從學python,我已經拋棄了計算器。why?因為python比計算器來的快啊!今天要說的斐波那契數列也是,python生成遠比書寫加計算來的快!如果你也想擁有這項牛 zhuang 逼 bi 技能,趕快和我一起學p...
python實現斐波那契數列
方法二 構造遞迴函式def recur fibo n 斐波那契數列指的是這樣乙個數列 0,1,1,2,3,5,8,13,特別指出 第0項是0,第1項是第乙個1。從第三項開始,每一項都等於前兩項之和。核心 fibo 0 1 for ii in range 2 times 2 fibo ii 1 加入了...