C语言递归打印前N个正偶数程序出现段错误求助
递归打印偶数代码段错误的原因及修复方案
问题原因
你的递归函数没有终止条件:
- 当
n递减到0时,0 % 2 == 0仍然成立,函数会继续调用even(-2) - 负数如
-2、-4等同样满足n % 2 == 0(C语言中负数模正数的结果值为0),递归会无限进行下去 - 每次递归都会在栈上分配函数栈帧,最终栈空间耗尽,触发
segmentation fault(段错误)
修复方案
添加递归终止条件:当n <= 0时直接返回,停止递归。修改后的代码如下:
#include<stdio.h> void even(int n); int main() { even(20); return 0; } void even(int n) { // 新增终止条件:n<=0时停止递归 if (n <= 0) { return; } if (n % 2 == 0) { even(n - 2); printf(" %d", n); } }
验证结果
运行修改后的代码,调用even(20)会输出: 2 4 6 8 10 12 14 16 18 20,符合打印到20的正偶数的需求。如果需要打印前N个正偶数(比如前20个是2到40),只需要调用even(40)即可。
内容的提问来源于stack exchange,提问作者Vaibhav
相关产品推荐
相关产品推荐

