You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 07:50:17