python生成斐波拉契数列

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是怎么执行的。。很疑惑,为什么能生成斐波拉契数列。

阅读 3.6k
2 个回答

費氏數列:

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) 值為0

  • b=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

python中交换变量最常见的方法是
x,y = y,x
所以这里只是这个形式的变形 希望能帮助你理解
ps:与题目无关这题 用矩阵加速能更快

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进