【问题标题】:The math step in the Fibonacci sequence斐波那契数列中的数学步骤
【发布时间】:2020-10-24 17:56:24
【问题描述】:

又是 Python 新手。

使用for 循环编写斐波那契数列。

我了解for 循环的工作原理,您基本上是在告诉一个函数在给定的数字范围内重复运行。

这听起来可能很愚蠢,但我无法理解它的数学步骤。我知道斐波那契是将前两个数字加在一起给出当前数字,我已经看到了一堆代码示例,但它只是不适合我。这是我的代码(我从别人那里偷了数学部分):

n = int(input("Please provide a sequence term: "))

def fib2(num):
    a, b = 1, 1
    for i in range(num - 1):
        a, b = b, a + b
    return ("The nth term in the Fibonacci sequence is:", a)

print(fib2(n))

另外,谁能告诉我如何让nth 成为n 的输入值?

【问题讨论】:

  • 你有没有一步步尝试你的代码,看看会发生什么?
  • 好吧a, b = b, a + b 只是同时更新a 和b。 a 的新值为bb 的新值为a+b。像这样的东西是必要的,因为你需要b 来计算新的aa 来计算新的b。你冷使用以下三行代替:(1)b_copy = b,(2)b=a+b,(3)a=b_copy。
  • 哪个部分没有点击?您的代码反复将当前数字和之前的数字相加,为下一次迭代生成一对新数字。
  • 在您的开发环境中逐步检查代码,逐步检查变量。并按照一张纸上的逻辑。这应该澄清它。
  • a, b = b, a + b 主要是两个赋值语句的简写:a = bb = a + b — 这是 Fibonacci sequence 的定义,其中每个后续数字是前两个的总和。

标签: python fibonacci


【解决方案1】:

第一列是i 的值 - 在每次下一次迭代中它都会增加。

i        1    1    2    3    5    8
         a    b  (a+b)  
0             a    b  (a+b)
1                  a    b  (a+b)
2                       a    b  (a+b)
3                            a    b

你可能会看到,在每一行(步骤、迭代)中,前一个b 变成a,前一个(a+b) 变成b,所以有人会很想把它写成表格

 a = b 
 b = a + b

但这是错误的——第一条语句改变了a,而我们需要在第二条语句中使用它的unchanged值。

我们需要根据上一次迭代获得的当前不变值更改两个变量ab的值。

在 Python 中,可以通过使用单个语句来实现

a, b = b, a + b

注意

代替

return ("The nth term in the Fibonacci sequence is:", a)

使用

return f"The {num}th term in the Fibonacci sequence is {a}"

获得更漂亮的输出。

【讨论】:

    【解决方案2】:

    稍微扩展一下语法可能会更容易。

    a = 1
    b = 1
    

    此时,可以合理地假设a 是第一个斐波那契数,b 是第二个。

    for i in range(num - 1):
       t = a + b
       a = b
       b = t
    

    注意t下一个斐波那契数。第一次循环,我们将t设置为第三个​​斐波那契数,然后重置a作为第二个,b作为第三个.下一次循环时,t 将是第四个,a 第三个,b 第四个。

    现在,我们可以看到如果你调用fib2(1),那么range(1-1) == range(0)empty,所以循环永远不会进入,a保持不变,所以它返回第一个斐波那契数. fib2(2) 使用range(2-1) == range(1),所以循环执行一次,等等。

    最后一件事:看起来您可能想要打印一个字符串

    def fib2(num):
        ...
        print ("The nth term in the Fibonacci sequence is:", a)
    
    fib2(5)
    

    或返回一个字符串供调用者打印

    def fib2(num):
        ...
        return "The nth term in the Fiibonacci sequence is " + str(a)
    
    print(fib2(num))
    

    orb set,只需返回斐波那契数,让调用者决定如何处理它:

    def fib2(num):
        ...
        return a
    
    print("The 5th term in the Fibonacci sequence is", fib2(5))
    

    【讨论】:

      猜你喜欢
      • 2015-06-05
      • 1970-01-01
      • 1970-01-01
      • 2020-01-18
      • 2013-08-03
      • 2014-05-19
      • 2015-08-30
      相关资源
      最近更新 更多