看不懂这个斐波那契python程序



我是新手,我正在尽我最大的努力真正理解我学习的每一段代码中发生的一切。我可以设法通过网站来编写这段代码,解释如何做到这一点,但是,我仍然无法理解在' while counter <nterms。我知道我们在这里创建了一个循环,也创建了一个使斐波那契数列发生的方程,但我想知道是否有人有耐心为我分解它?提前谢谢你。我不想为了成绩而做实验,我真的想和他们一起学习。>


nterms = int(input("Please enter a positive integer greater than 1: "))

n1, n2 = 1, 1
count = 0

if nterms == 1:
print(nterms)
print(n1)
else:
while count < nterms:
print(n1)
nth = n1 + n2
n1 = n2
n2 = nth
count += 1

你知道斐波那契数列吗?1, 1, 2, 3, 5, 8, 13, 21, 34, 55

你能表述这个吗?…恩……从第3个数字开始,每个数字都是前两个数字的和:F_n = F_n-1 + F_n-2

现在,你有2个第一个数字:1, 1,你必须得到所有其他数字…如何?简单的累加并创建新的variable…:

nth = n1 + n2

现在,你的新号码是2,你有3个号码[1,1,2]

注意,你可以这样做,并永远创建新的数字…但是,根据fibo公式,你知道要定义一个新数字,你只需要2个前…

所以,移动所有的数字并删除这3个数字中的第一个数字,只保留第二个和第三个数字:[1, 1, 2] => [1, 2]

n1 = n2
n2 = n3

一个非常简单的观点:如果你没有定义一个新的变量,n3,你不能移动数字,因为…

假设你设置了n2 = n1 + n2,那么你没有第二个变量shift:n1 = n2,你错过了第二个变量…


如果你知道list,你可以使用list:

fibo = [1, 1]
for i in range(nterms - 2):
fibo.append(fibo[-1] + fibo[-2])

还有,python有一个很棘手的shift方式:

for i in range(nterms):
print(n1)
n1, n2 = n2, n1 + n2

请注意,你打印第一个元素,n1,在每次迭代中,所以你不需要if部分和每一个数字被转移到n1,它将被打印。

斐波那契数列是一组数字,其中任何数字都是前两个数字的和(该数列的前两个数字除外),如1,1,2,3,5,8,13,…维基百科的文章在这里。
程序打印数字n1,创建一个临时变量(nth,它是前面两个数字的和),并将n1设置为n2的值,将n2设置为临时变量nth的值。这将n1n2在序列中向上移动一个值。它增加count,以便在打印用户输入的数字后退出。

斐波那契数列总是以1,1开头。如果输入1,则序列已经完成。这是if语句

while循环将打印第一个数字。然后,使用一个临时变量(n),它将计算序列中的下一个数字(第一次循环时序列中的第3个数字)。现在,它将把n2移到n1中,并将结果存储在n2中(在临时变量'nth'中)。

例如,如果输入4:

第一个循环:

print (n1) #(1)
nth = (n1 + n2) #(2)
n1 = n2 #(1)
n2 = nth #(2)
count += 1 #(3)

这将显示:1,并将1存储在n1中,2存储在n2中。

下一个循环将显示1,然后在nth中存储1 + 2,然后在n1中存储2,在n2中存储nth(或3)。计数现在为2。

下一个循环将显示2,然后将2 + 3存储在nth中,然后将3存储在n1nth中(或5)存储在n2中。计数现在是3

直到count变量与用户输入的初始整数相同为止。

在这种情况下,最后一个循环将显示3,它存储在n1中,这将是它的结束,因为计数将不再小于nterms

如果可以的话,我很乐意再澄清一下。

最新更新