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

我想将所有斐波那契数打印到索引为 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)) 


明月笑刀无情
浏览 78回答 3
3回答

米琪卡哇伊

&nbsp; &nbsp; &nbsp; &nbsp; for i in range(n):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return fibonacci(n-1) + fibonacci(n-2)这个 for 循环是没有意义的,因为你return是第一次迭代。您应该在这里完全摆脱 for 循环。这也不是您要重复的部分。相反,您想重复该print()语句:for i in range(n):&nbsp; &nbsp; print(fibonacci(i)) # You want the i-th fibonacci number这将为您提供所需的结果,但这是一种非常低效的方法。对于较大的 值n,您将计算第 i 个斐波那契数的指数次数。

素胚勾勒不出你

这个怎么样?:def fib(l,ix):&nbsp;&nbsp;&nbsp; a = [l[0], l[1]]&nbsp; for i in range(ix):&nbsp; &nbsp; b = a[i+1]+a[i]&nbsp; &nbsp; a.append(b)&nbsp; return str(a)[1:-1]第一个参数是斐波那契的前两个数字(即 [0,1])。第二个参数是您想要斐波那契数的数字(即 50)。这给了你类似的东西print(fib([0,1],50))。

弑天下

如果您很聪明并且n大于 1,您可能希望以reduce更复杂的方式使用:from functools import reducedef fibonacci(n):&nbsp; &nbsp; return reduce(lambda x,y: x+[x[-1]+x[-2]], [[0,1]]+[[0]]*(n-2))这就是它的工作原理n=5:[[0,1], [0], [0], [0]] ->&nbsp;[[0,1,1], [0], [0]] ->&nbsp;[[0,1,1,2], [0]] ->&nbsp;[[0,1,1,2,3]] ->&nbsp;stops here and returns [0,1,1,2,3]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python