斐波那契数列中的数学步骤
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
是 下一个 斐波那契数列。第一次通过循环,我们设置 t
为 third 斐波纳契数,然后 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
,而我们需要在第二个语句中使用它的 未更改 值。
我们需要根据当前两个变量a
和b
的值更改[=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}"
以获得更漂亮的输出。
再次成为 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
是 下一个 斐波那契数列。第一次通过循环,我们设置 t
为 third 斐波纳契数,然后 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
,而我们需要在第二个语句中使用它的 未更改 值。
我们需要根据当前两个变量a
和b
的值更改[=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}"
以获得更漂亮的输出。