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

如何用递归实现指定范围内偶数的打印与求和?解决代码迭代异常

解决递归实现范围偶数打印与求和的问题

我帮你分析下当前代码的问题,然后给出两种可行的修复方案,让它能正确输出指定范围内的偶数求和表达式~

原代码的问题分析

先看你遇到的场景:当范围两端都是奇数(比如3到9)时,输出了+4+6+8+10=28,明显不符合预期。问题出在这几个地方:

  1. 递归终止逻辑错误:原代码中当number2 < number时返回的number + number%2(比如3会返回4),之后逐层递归返回时会加2,最后得到10——这个数已经超出了上限9,但代码没有做范围校验,直接输出了。
  2. 全局变量风险:使用全局sum来累加,递归过程中状态容易混乱,而且代码里sum的声明在调用方法之后,这在C#里是编译错误哦。
  3. 打印格式问题:原代码输出会以+开头(比如+4+6+8),不符合常规的表达式格式。

方案一:用递归返回值传递结果(推荐,无全局变量)

这种方式把字符串拼接和求和都通过递归返回值来处理,逻辑更清晰,也避免了全局变量的问题:

// 主程序调用
var (seriesStr, totalSum) = PrintEvenSeriesAndSum(3, 9);
Console.WriteLine($"{seriesStr}={totalSum}");

// 递归方法,返回(偶数表达式字符串, 求和结果)
static (string, int) PrintEvenSeriesAndSum(int start, int end)
{
    // 边界处理:起始值大于结束值,返回空字符串和0
    if (start > end)
    {
        return ("", 0);
    }

    // 如果当前起始值是奇数,先跳到下一个偶数
    if (start % 2 != 0)
    {
        return PrintEvenSeriesAndSum(start + 1, end);
    }

    // 递归终止:当前值等于结束值,直接返回该数
    if (start == end)
    {
        return (start.ToString(), start);
    }

    // 递归处理下一个偶数
    var (subSeries, subSum) = PrintEvenSeriesAndSum(start + 2, end);

    // 拼接当前数和子表达式,累加求和
    return ($"{start}+{subSeries}", start + subSum);
}

运行这段代码,输入3到9时会输出4+6+8=18,完全符合预期。

方案二:修复原递归逻辑(保留类似结构)

如果你想尽量保留原代码的结构,可以调整终止条件和范围校验,同时修正打印格式:

int sum = 0;
printSeries(3, 9);
Console.WriteLine("=" + sum);

int printSeries(int number, int number2)
{
    // 边界处理:起始值大于结束值,终止递归
    if (number > number2)
    {
        return 0;
    }

    // 找到当前范围内的第一个偶数
    int currentEven = number % 2 == 0 ? number : number + 1;

    // 如果这个偶数超出范围,终止递归
    if (currentEven > number2)
    {
        return 0;
    }

    // 递归处理下一个偶数
    int nextEven = printSeries(currentEven + 2, number2);

    // 控制打印格式:如果是最后一个数(nextEven为0),不加前置+号
    if (nextEven != 0)
    {
        Console.Write("+" + currentEven);
    }
    else
    {
        Console.Write(currentEven);
    }

    sum += currentEven;
    return currentEven;
}

这个方案修复了原代码的核心问题:通过判断currentEven > number2避免处理超出范围的数,同时调整打印逻辑去掉了开头的+号。

内容的提问来源于stack exchange,提问作者OddCommand24

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:22:05