Python斐波那契数列生成函数计算错误,求排查与修正方案
修复斐波那契数列函数的错误
原代码存在的问题:
- 循环变量覆盖了函数参数
n:for n in range(1,n)中,循环变量与参数同名,直接打乱了循环的终止条件逻辑。 - 递推逻辑错误:原代码先更新
j = j+i,再用更新后的j计算i = j+i,这导致每一步的数值计算完全偏离斐波那契数列“后项等于前两项之和”的规则。 - 返回值逻辑错误:返回
i+j不符合需求,比如输入n=1时,正确结果应为1,但原函数会返回2。 - 未处理边界情况:对于n=1、n=2这类基础输入,原函数无法输出正确结果。
修正后的代码:
def fibo(n): if n <= 0: return "请输入正整数" elif n == 1 or n == 2: return 1 # 初始化前两项 prev, curr = 1, 1 # 从第3项开始迭代,共循环n-2次 for _ in range(n - 2): prev, curr = curr, prev + curr return curr n = input('Enter number:') print(fibo(int(n)))
修正说明:
- 新增边界判断:针对非正整数、n=1、n=2的情况直接返回对应结果,贴合斐波那契数列的常规定义。
- 循环变量改用
_:避免覆盖函数参数n,同时明确表示该变量在循环中无需使用。 - 正确实现递推逻辑:用
prev, curr = curr, prev + curr的元组交换写法,确保每次更新时,curr取前两项之和,prev更新为上一轮的curr,完全符合斐波那契数列的递推规则。 - 调整循环次数:前两项已初始化,从第3项到第n项只需迭代
n-2次,即可得到第n项的数值。
内容的提问来源于stack exchange,提问作者סיון חוה סנבטאו
相关产品推荐
相关产品推荐

