求教Python斐波那契程序中while循环段的运行逻辑
斐波那契代码while循环段执行逻辑拆解
进入循环前的初始状态
当用户输入的正整数nterms大于1时,代码会跳过nterms == 1的分支进入else块,此时三个核心变量的初始值为:
n1 = 1:存储当前待输出的斐波那契数列项n2 = 1:存储当前项的下一项初始值count = 0:计数器,记录已经输出的斐波那契数个数
循环的判定规则while count < nterms逻辑很直白:只要已经输出的数的个数还没达到用户要求的数量,就重复执行循环内的逻辑。
循环内逐行作用说明
循环体一共5行,逻辑完全贴合斐波那契数列“后项等于前两项之和”的递推规则,逐行作用如下:
print(n1)
直接打印当前存储的待输出数列项。第一次进入循环时n1是初始值1,因此打印的第一个数为1。nth = n1 + n2
按照递推规则,计算出当前两项之和,也就是数列的下一个新项,暂存在nth变量里。第一次执行这行时n1=1、n2=1,计算得到nth=2。n1 = n2
做变量值的滚动前移:原来存的下一项n2,会成为下一轮循环里待输出的当前项。第一次执行完这行,n1会从初始的1更新为n2存储的1。n2 = nth
把上一步算出来的新项nth,赋值为下一轮的“下一项”,给下一轮的求和计算做准备。第一次执行完这行,n2会从初始的1更新为刚算出的2。count += 1
计数器自增1,代表已经成功输出了1个斐波那契数。第一次执行完这行,count会从0变成1。
递推生成的运行逻辑
这个实现没有提前存储整个数列,而是靠两个变量滚动更新来生成所有项,本质是个“滑动窗口”的思路:
这个版本的斐波那契数列从1、1开始,从第三项开始每一项等于前紧邻两项的和。每次循环只做四件事:输出当前项、算出下一个新项、把两个存储位整体往后挪一位、计数加1,直到输出够要求的项数就自动停。
我们拿输入nterms=5举例,每轮循环执行完的状态如下,可以直观看到滚动过程:
- 第1轮结束:输出1,
n1=1,n2=2,count=1 - 第2轮结束:输出1,
n1=2,n2=3,count=2 - 第3轮结束:输出2,
n1=3,n2=5,count=3 - 第4轮结束:输出3,
n1=5,n2=8,count=4 - 第5轮结束:输出5,
n1=8,n2=13,count=5
当第5轮结束时count=5,和nterms的值相等,count < nterms的判定条件不成立,循环直接终止,最终打印出的数列是1、1、2、3、5,正好是要求的5项。
内容的提问来源于stack exchange,提问作者Andressa Trajano
相关产品推荐
相关产品推荐

