小编典典

斐波那契数的迭代算法

algorithm

我对斐波纳契数的迭代算法感兴趣,因此我在Wiki上找到了公式…它看起来很直接,所以我在Python中尝试了它…编译没有问题,公式看起来正确…不是确定为什么它给出错误的输出…我没有正确实现它吗?

def fib (n): 
    if( n == 0):
        return 0
    else:
        x = 0
        y = 1
        for i in range(1,n):
            z = (x + y)
            x = y
            y = z
            return y

for i in range(10):
    print (fib(i))

输出

0

1
1
1
1
1
1


阅读 422

收藏
2020-07-28

共1个答案

小编典典

问题是您return y在函数的循环中。因此,在第一次迭代之后,它将已经停止并返回第一个值:1.除了何时n为0,在这种情况下,使函数返回0自身,而对于情况n为1,则for循环甚至不会迭代一次,并且没有return被执行(因此None返回值)。

要解决此问题,只需将其移到return y循环外部即可。

替代实施

遵循KebertX的示例,这是我个人将在Python中制作的解决方案。当然,如果要处理许多斐波那契值,您甚至可能希望结合使用这两种解决方案并为数字创建缓存。

def f(n):
    a, b = 0, 1
    for i in range(0, n):
        a, b = b, a + b
    return a
2020-07-28