有没有办法列出序列中的所有斐波那契数?

时间:2019-07-04 23:10:54

标签: python python-3.x fibonacci python-3.7

我刚刚开始学习python,并尝试将所有斐波那契数列到第n个词。我写了一些我认为正确的代码,但是我对下一步该怎么办感到困惑

def fibonacci(n):
    l = [0,1]
    for i in range(2,n)
         fibonacci(i-1) + fibonacci(i-2)

代码是不完整的,我知道我必须将最后一行链接回早期的代码,但是我对下一步该怎么办感到困惑。拜托,有人可以帮忙吗?

3 个答案:

答案 0 :(得分:0)

这可能是一种实现方式。这里n是第n个项。

n = 25
a = 0
b = 1
print(a)
print(b)
for i in range(n-2):
  c = a + b;
  print(c)
  a = b;
  b = c;

答案 1 :(得分:0)

在Internet上进行快速搜索将显示一些实现斐波那契代码的有趣方法。主要的基本要素是:迭代和递归。代码的问题是您将两者混在一起。

如果要使用递归,则缺少的主要要素是:停止条件和实际步骤(因为您不返回任何东西)。要使用递归,您必须确保它会在某个时刻停止。为此,我们使用停止条件。在我们的情况下,停止条件为已知值:01。所以我们会想要类似的东西:

if n == 1:
    return 0
if n == 2:
    return 1

现在我们有了停止状态,剩下的就很容易了。只需执行该步骤,其余的将独立工作:

def fib_rec(n):
    if n == 1:
        return 0
    if n == 2:
        return 1

    return fib_rec(n-1) + fib_rec(n-2)

跳至this link可以看到那里发生的情况。


如果要使用循环,则需要通过交换变量的值来确定逻辑。像这样:

def fib_loop(n):
    prev = 0
    cur = 1
    for _ in range(2, n):
        next = prev + cur
        prev = cur
        cur = next
    return next

同样,转到here以查看代码的可视化。将帮助您理解。

答案 2 :(得分:0)

(概念上)提供其中所有 的生成器让用户决定要摄取多少:

def fibonacci():
    a = 0
    b = 1
    while True:
        yield a
        a, b = b, a + b

from itertools import slice

first_ten = list(islice(fibonacci(), 10))
first_twenty = list(islice(fibonacci(), 20))
# etc