斐波那契数列——Python的三种实现方法

首先,斐波那契数列指的是这样一个数列: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*)

虽说递归入门的时候都会做斐波那契数列,但是用递归来算斐波那契数列真不是个好办法。
这里推荐大家可以直接用for循环做,话不多说直接上代码:

#O(n)
def fibonacci1(n):
    assert(n>=0)
    a, b = 0, 1
    for i in range(1, n+1):
        a, b = b, a + b
    return a    

递归:

# O(2^n)
def fibonacci2(n):
    assert(n>=0)
    if (n <= 2): 
        return 1
    return fibonacci2(n-1) + fibonacci2(n-2)

递归改进版本:
(这个时候返回的是一对值,需要自己去选择)
这个递归快的原因就是,返回的是一对值,再去调用的时候直接使用了之前的返回值。

def fibonacci3(n):
    assert(n>=0)
    if (n <= 1): 
        return (n,0)
    (a, b) = fibonacci3(n-1)
    return (a+b, a)

你可能感兴趣的:(万门,算法,Python)