【问题标题】:How to print all fibonacci numbers before the n-th fibonacci number?如何打印第 n 个斐波那契数之前的所有斐波那契数?
【发布时间】:2020-02-12 23:41:13
【问题描述】:

我想将所有斐波那契数列打印到索引为 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 循环放错了位置。这里的一种解决方案是将print() 语句放入for 循环中。这是一种非常低效的方法,但它会得到你想要的结果。
  • 不要使用可怕的双递归斐波那契定义,它除了不适合按升序打印之外效率极低,而是从头开始并向上计算。

标签: python python-3.x fibonacci


【解决方案1】:
        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 个斐波那契数的指数次数。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案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)) 的东西。

      【讨论】:

        猜你喜欢
        • 2022-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-14
        • 2022-11-27
        • 2015-01-04
        相关资源
        最近更新 更多