def fib(max):
n, a, b = 0, 0, 1
while n < max:
print(b)
a, b = b, a + b
n = n + 1
return 'done'
这段代码中a, b = b, a + b
是怎么执行的。。很疑惑,为什么能生成斐波拉契数列。
python中交换变量最常见的方法是
x,y = y,x
所以这里只是这个形式的变形 希望能帮助你理解
ps:与题目无关这题 用矩阵加速能更快
費氏數列:
f(k) = f(k-1) + f(k-2) for k>=2 ... formula(1)
f(k) = 1 for k=0, 1 ... formula(2)
---------------------------------------------以上為正式定義
f(k) = 0 for k<0 (這是用想像的)
首先要弄清楚的是: n
, a
, b
所代表的意義:
n
: 數列的index...................................meaning(1)a
: 代表數列的第 n-1 項的值 f(n-1)......meaning(2)b
: 代表數列的第 n 項的值 f(n).............meaning(3)
一開始(k=n=0):
n=0
: 從第0項開始a=0
: 數列的第-1項(此時k=n=0,k-1=n-1=-1) 值為0b=1
: 數列的第 0項(此時k=n=0) 值為1
此時均完全符合定義。
接著在 while loop 中我們依次印出第 n 項的值並將 n
往前推進 1。
每印出第 n 項的值: b
,我們必須要計算第 n+1 項的值(下一次的 b
)。
套用前面的公式:
f(n+1) = f(n) + f(n-1) ... 推導自 formula(1),令 k=n+1
= b + a ... 推導自 meaning(2)(3)
而 f(n+1) 即為下一次 loop 的 b 值
----------------------------------------------
b = b + a
這一次 loop 的 b 值即為下一次 loop 的 a 值
----------------------------------------------------------------------------
a = b
所以 a, b = b, a+b