pythonは再帰的にフィボナッチ数列を実現する

1317 ワード

フィボナッチ数列(Fibonacci sequence)は、黄金分割数列とも呼ばれ、数学者レオナルド・フィボナッチ(Leonardoda Fibonacci)がウサギの繁殖を例に導入したことから「ウサギ数列」とも呼ばれ、1、1、2、3、5、8、13、21、34、・・・数学的には、フィボナッチ数列は,F(1)=1,F(2)=1,F(n)=F(n−1)+F(n−2)(n>=3,n∈N*)という繰返し方法で定義される.
pythonを使用してnの値をどのように求めますか?
def flag(b):
    if b < 0:
        return "     0   !"
    if b == 0:
        return 0
    if b == 1:
        return 1
    if b == 2:
        return 1
    return flag(b-1) + flag(b-2)
print(flag(-1))
print(flag(0))
print(flag(2))
print(flag(3))
print(flag(10))

印刷結果:
     0   !
0
1
2
55

インプリメンテーション印刷の値が1,1,2,3,5,8,13,21,34であれば......どのようにインプリメンテーションすればよいのでしょうか.
#          2  
resList = [0,1,1]
def flag(n):
    #     ,  flag(n-1) + flag(n-2)    ,n   1 2,  return  1
    if n == 1 or n == 2:
        return 1
    a = flag(n-1) + flag(n-2)
    #                  ,     
    if(a > resList[-1]):
        resList.append(a)
    return a
n = 10
#  resList      ,    n  2 ,      flag(),       
if n < 0:
    print("n     0")
elif n == 0:
    print("0")
elif n == 1:
    print("0,1")
else:
    flag(n)
    print(resList)

実行結果
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

后ろのこの実现に対して、ただ私の个人の考えで、もっと简単な方法があるべきで、みんなが分かち合うことを歓迎します.