如何在第 n 个斐波那契数之前打印所有斐波那契数?

How to print all fibonacci numbers before the n-th fibonacci number?

我想将所有斐波那契数打印到索引为 n 的那个数,但我的代码只打印第 n 个斐波那契数。请告诉我我哪里做错了,应该怎么做?

n = int(input('Enter a number: '))
def fibonacci(n): 
    if n < 0: 
        print("Error(enter a positive integer)") 
    elif n == 1: 
        return 0
    elif n == 2: 
        return 1
    else: 
        for i in range(n):
            return fibonacci(n-1) + fibonacci(n-2)

print(fibonacci(n)) 
        for i in range(n):
            return fibonacci(n-1) + fibonacci(n-2)

这个 for 循环是没有意义的,因为你 return 在第一次迭代中。你应该完全摆脱这里的 for 循环。

这也不是您要重复的部分。相反,您想重复 print() 语句:

for i in range(n):
    print(fibonacci(i)) # You want the i-th fibonacci number

这会得到您想要的结果,但这是一种非常低效的方法。对于较大的 n 值,您将计算第 i 个斐波那契数的指数次。

如果您很聪明并且您的 n 大于 1,您可能想以更复杂的方式使用 reduce

from functools import reduce
def fibonacci(n):
    return reduce(lambda x,y: x+[x[-1]+x[-2]], [[0,1]]+[[0]]*(n-2))

这是 n=5 的工作方式:

[[0,1], [0], [0], [0]] -> 
[[0,1,1], [0], [0]] -> 
[[0,1,1,2], [0]] -> 
[[0,1,1,2,3]] -> 
stops here and returns [0,1,1,2,3]

这个怎么样?:

def fib(l,ix):  
  a = [l[0], l[1]]
  for i in range(ix):
    b = a[i+1]+a[i]
    a.append(b)
  return str(a)[1:-1]

第一个参数是关于斐波那契数列的前两个数(即 [0,1])。第二个参数是你想要斐波那契数的数字(即 50)。 这给你类似 print(fib([0,1],50)) .