为何这段斐波那契数列代码最多只能输出8项?该如何调试?
问题排查与修复方案
核心问题定位
你代码的问题出在两个核心错误点:
- 局部变量
fib未初始化就进入while(fib <= N)判断,属于未定义行为,大概率会读取到栈上的随机值,直接导致循环提前终止 - 循环条件逻辑完全不符合需求:你的输入提示语明确说明
N是要生成的序列最大项数,但当前判断条件是「斐波那契数值小于等于N」,当你输入N=8时,斐波那契数计算到13就超过8了,自然最多输出到第7、8项就停了,这就是你无法输出超过8项的根因
调试排查步骤
- 第一步校验变量初始值:在while循环前加
printf("init fib value: %d\n", fib);,就能直接看到fib是随机垃圾值,快速定位未初始化问题 - 第二步校验循环条件逻辑:输入N=10手动验证,斐波那契序列为1,1,2,3,5,8,13... 当数值到13的时候就满足
fib>10,循环直接停止,和你无法输出超过8项的现象完全吻合 - 第三步确认需求对齐:根据输入提示语的语义,
N是要生成的项数,需要把循环条件从数值判断改成计数控制
修正后的代码
如果你需要输出N项斐波那契序列,修正后代码如下:
#include <stdio.h> void Fibonacci(int N); int main(){ int N; printf("Enter the max term of Fibonacci sequence : "); scanf("%d", &N); Fibonacci(N); } void Fibonacci(int N){ int fib0=0, fib1=1, fib; printf("%d", fib1); int count = 1; while(count < N){ fib=fib0+fib1; fib0=fib1; fib1=fib; printf("\t%d",fib1); count++; } }
如果你需要输出所有不超过N的斐波那契数,只需要修正fib初始化问题即可:
void Fibonacci(int N){ int fib0=0, fib1=1, fib = 1; printf("%d", fib1); while(fib <= N){ fib = fib0 + fib1; fib0 = fib1; fib1 = fib; printf("\t%d", fib1); } }
内容的提问来源于stack exchange,提问作者Alfad
相关产品推荐
相关产品推荐

