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

如何通过递归实现字符串中数字字符的求和?

递归实现字符串中数字求和

先说说你现有代码的几个问题:

  • 终止条件错误:index >= num.Length -1会跳过最后一个字符,比如处理"123"时,当index等于2(最后一位索引),直接触发返回,没把最后一位数字加进去。
  • 字符转数字方式错误:Convert.ToInt32(char)获取的是字符的ASCII码值,比如'1'对应的是49,不是数字1,正确的转换方式是用num[index] - '0'(数字字符的ASCII码是连续的,'0'到'9'对应48到57)。
  • 冗余的char数组:完全不需要额外创建char数组,直接通过num[index]就能访问对应位置的字符。

修正你的原有代码

如果要保留你原来的函数结构(使用ref参数),可以改成这样:

static void SumString(string num, ref int index, ref int result) 
{
    // 终止条件:索引超出字符串长度时结束,输出最终结果
    if(index >= num.Length)
    {
        Console.WriteLine(result);
        return;
    }    
    // 将当前字符转为数字并累加
    result += num[index] - '0';
    index++;
    // 递归调用处理下一个字符
    SumString(num, ref index, ref result);
}

调用示例:

string testStr = "123";
int currentIndex = 0;
int totalSum = 0;
SumString(testStr, ref currentIndex, ref totalSum); // 输出6

更简洁的递归写法(推荐)

递归函数可以设计成返回int类型,不需要ref参数,逻辑更清晰直观:

static int SumDigits(string num)
{
    // 终止条件:字符串为空时返回0
    if (string.IsNullOrEmpty(num))
        return 0;
    // 取第一个字符转成数字,加上剩余子字符串的递归求和结果
    int firstDigit = num[0] - '0';
    return firstDigit + SumDigits(num.Substring(1));
}

调用示例:

int sumResult = SumDigits("123");
Console.WriteLine(sumResult); // 输出6

这个写法的核心逻辑是:每次取字符串的第一个数字,加上剩余子字符串的求和结果,直到字符串为空时返回0,完成递归流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:40:51