C语言编写斐波那契数列查询代码运行无输出问题排查求助
斐波那契代码问题排查与修复
核心错误点(直接导致无输出)
- 变长数组声明时机错误:你在
scanf给变量n赋值之前就声明了int seq[n],此时n是未初始化的垃圾值,数组长度非法,后续访问数组元素属于未定义行为,大概率触发程序崩溃导致无任何输出。 - 打印判断逻辑错误:for循环的终止条件是
i <= n,循环执行结束后i的值为n+1,后续判断if(i == n)永远为假,printf语句根本不会执行,这是无输出的最直接原因。
其他潜在问题
- 未校验输入合法性:如果用户输入负数,会导致数组长度为负,直接触发程序异常
- 内存利用冗余:仅查询单个位置的斐波那契值不需要存储整个数列,只需要保留前两项的值即可,完全可以省去数组的内存开销
- 数值溢出风险:
int类型取值范围有限,当n超过46时就会发生整数溢出,大n场景建议改用long类型存储数值
最小改动修复版代码(和原代码逻辑对齐)
#include <stdio.h> int main(){ int n; int i; printf("number of sequence for the fibonacci number that you want to find out (from 0)= "); scanf("%d", &n); // 输入合法性校验 if(n < 0){ printf("input n cannot be negative\n"); return 1; } // 数组声明移到n赋值之后 int seq[n+1]; for(i = 0; i <= n; i++){ if(i == 0){ seq[i] = 0; } else if(i == 1){ seq[i] = 1; } else{ seq[i] = seq[i-1] + seq[i-2]; } } // 去掉无效判断直接打印 printf("the value in sequence %d is %d\n", n, seq[n]); return 0; }
优化版代码(无需数组,性能更高)
#include <stdio.h> int main(){ int n; printf("number of sequence for the fibonacci number that you want to find out (from 0)= "); scanf("%d", &n); if(n < 0){ printf("input n cannot be negative\n"); return 1; } if(n == 0){ printf("the value in sequence 0 is 0\n"); return 0; } // 用long避免溢出 long prev_prev = 0, prev = 1; for(int i = 2; i <= n; i++){ long temp = prev; prev = prev_prev + prev; prev_prev = temp; } printf("the value in sequence %d is %ld\n", n, prev); return 0; }
内容的提问来源于stack exchange,提问作者imnotarobot
相关产品推荐
相关产品推荐

