【问题标题】:How to find the nth value in a Fibonacci series? [duplicate]如何找到斐波那契数列中的第 n 个值? [复制]
【发布时间】:2020-10-18 15:28:35
【问题描述】:
# Function for nth Fibonacci number 

def Fibonacci(n): 
    if n<0: 
        print("Incorrect input") 
    # First Fibonacci number is 0 
    elif n==1: 
        return 0
    # Second Fibonacci number is 1 
    elif n==2: 
        return 1
    else: 
        return Fibonacci(n-1)+Fibonacci(n-2) 

# Driver Program 

print(Fibonacci(9))

我是编程新手。 我不明白这个代码是如何找出斐波那契数的...... 程序如何计算(n-1)和(n-2)的值

【问题讨论】:

  • 尝试0作为参数。

标签: python fibonacci


【解决方案1】:

这是SICP 书籍 中的示意图。

Fibonacci(5) 被调用时,Fibonacci(5-1) (fib 4) 和Fibonacci(5-2) (fib 3) 也会被调用。当Fibonacci(4) 被调用时,Fibonacci(4-1)Fibonacci(4-2) 也会被调用,以此类推。这称为递归

最后,当调用Fibonacci(2)Fibonacci(1) 时,其结果10 直接返回,无需进一步调用。就是这种递归的终止条件。

顺便说一下,如图所示,多次调用fib 3,被视为重复计算,导致效率低下。因此,它仅用于演示递归的工作原理,而在实践中通常不用于计算 fib。

【讨论】:

    【解决方案2】:

    要解释您的代码如何识别斐波那契数列中的第 n 个数字,首先您需要了解如何生成斐波那契数列。

    0、1、1、2、3、5、8、13 等等。

    在这里,如果您查看前两个数字,它是 0 和 1,这些是基数,从那里开始,通过前两个数字相加可以找到下一个数字。于是有了公式。

    F(1) = 0
    F(2) = 1
    F(n) = F(n-1) + F(n-2)
    

    现在,如果您查看您的代码,上面的代码就在这里准确描述了。任何小于 1 的 n 值都将被视为无效。值 1 返回 0,值 2 返回 1。这与我们上面提到的完全相同。

    Fibonacci(n-1)+Fibonacci(n-2) 
    

    最后,对于所有其他情况,我们使用相同的规则(函数)找到系列中的前两个数字,并将它们相加得到所需的数字。

    【讨论】:

      【解决方案3】:

      这段代码背后的想法是递归。查看this 了解更多信息。

      【讨论】:

        【解决方案4】:

        您的程序使用递归。

        在这里您可以找到可视化,这可以帮助您理解: https://observablehq.com/@victormutai/visualizing-recursive-fibonacci-algorithm

        替代实现是迭代算法。我可以更容易理解

        def f(n):
            a, b = 0, 1
            for i in range(0, n):
                a, b = b, a + b
            return a
        

        【讨论】:

        • 你能告诉我一些关于递归是如何工作的......
        【解决方案5】:
        return Fibonacci(n-1)+Fibonacci(n-2)
        

        这是一个递归。您应该缓存值以减少重新计算。

        此外,还有比内公式可以在 O(1) 时间计算它。 https://en.wikipedia.org/wiki/Fibonacci_number

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-12-10
          • 2021-09-03
          • 2014-02-22
          • 1970-01-01
          • 2012-10-12
          • 2012-10-12
          • 1970-01-01
          • 2015-06-19
          相关资源
          最近更新 更多