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

递归实现回文字符串判断函数无返回值默认false问题排查

问题分析与修复

你的递归回文判断函数出错的核心原因是误用了C++中string::substr的参数规则:

C++的substr函数第二个参数是要截取的字符长度,不是结束位置。你当前写的substr(1, some_string.length() - 1),会从索引1开始,截取原长度-1个字符——这会把原字符串的最后一个字符也包含进去,导致递归处理的子串不符合预期,最终逻辑错误。

比如输入回文字符串"aba":

  • 原长度是3,substr(1, 3-1)会截取从索引1开始的2个字符,得到"ba"
  • 递归判断"ba"时,首尾字符'b'和'a'不等,直接返回false,但实际"aba"是回文,这就导致了错误结果。

修复后的代码

只需要把substr的第二个参数改成some_string.length() - 2,就能准确截取去掉首尾字符后的子串:

bool isPalindrome(string some_string) {
    if (some_string.length() == 0 || some_string.length() == 1) {
        return true;
    }

    if (some_string[0] == some_string[some_string.length() - 1]) {
        // 从索引1开始,截取长度为原长度-2的子串(去掉首尾)
        return isPalindrome(some_string.substr(1, some_string.length() - 2));
    }

    else {
        return false;
    }
}

额外优化建议

  • 传递字符串的const引用,避免每次递归都拷贝字符串,提升性能:
    bool isPalindrome(const string& some_string) {
        // 函数逻辑不变
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 03:59:52