为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

明月笑刀无情 2022-07-26 20:45:24
我想将所有斐波那契数打印到索引为 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)) 
查看完整描述

3 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

        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 个斐波那契数的指数次数。


查看完整回答
反对 回复 2022-07-26
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

这个怎么样?:


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))。


查看完整回答
反对 回复 2022-07-26
?
弑天下

TA贡献1818条经验 获得超8个赞

如果您很聪明并且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]


查看完整回答
反对 回复 2022-07-26
  • 3 回答
  • 0 关注
  • 77 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信