斐波那契数列中的数学步骤

The math step in the Fibonacci sequence

再次成为 Python 的新手。

Write the Fibonacci sequence using a for loop.

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

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

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 = 1
b = 1

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

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

请注意,t 下一个 斐波那契数列。第一次通过循环,我们设置 tthird 斐波纳契数,然后 reset a 为第二个和 b 是第三个。下一次循环,t 将是第四个,a 是第三个,b 是第四个。

现在,我们可以看到如果你调用fib2(1),那么range(1-1) == range(0)空的,所以循环永远不会进入,a保持不变,因此它 return 是第一个斐波那契数。 fib2(2)使用range(2-1) == range(1),所以循环执行一次,以此类推

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

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

fib2(5)

或return 调用者打印的字符串

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

print(fib2(num))

orb 设置,只是 return 斐波那契数,让调用者决定如何处理它:

def fib2(num):
    ...
    return a

print("The 5th term in the Fibonacci sequence is", fib2(5))

第一列是 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,而我们需要在第二个语句中使用它的 未更改 值。

我们需要根据当前两个变量ab的值更改[=46] =] 从前面的迭代中获得的值。

在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}"

以获得更漂亮的输出。