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

递归回文函数返回值-1/1未打印的原因咨询

递归回文判断函数返回值未正确打印的原因

你的问题出在递归调用时没有返回子调用的结果,导致只有首尾字符不匹配的场景能返回-1并被打印,而匹配成功的场景下,最内层递归返回的1无法传递到顶层函数,最终顶层函数默认返回None。

具体代码问题分析

看这段关键代码:

if text[0] == text[lenText - 1]:
    palindrome(text[1:lenText - 1])  # 这里没有return

当首尾字符匹配时,函数会递归调用自身处理中间子串,但没有把递归调用的返回值传递回去。比如输入"tesseet"的递归流程:

  1. 第一层调用处理"tesseet",首尾匹配,调用处理"esse",但没有返回这个调用的结果,执行完后第一层函数没有返回值,默认返回None
  2. 第二层调用处理"esse",首尾匹配,调用处理"ss",同样没返回,返回None
  3. 第三层调用处理"ss",首尾匹配,调用处理空字符串,没返回,返回None
  4. 第四层处理空字符串,返回1,但这个1只传递给第三层,而第三层没有return这个值,所以第三层还是返回None,最终顶层拿到的就是None,打印出来自然不是1。

只有当某一层首尾字符不匹配时,函数会执行return -1,这个值会直接传递到顶层,被正确打印。

修复后的代码

只需要在递归调用前加上return,把子调用的返回值传递回去:

def palindrome(text):
    lenText = len(text)

    if text == "":
        print("Success")
        return 1

    else:
        print(text[0])
        print(text[lenText - 1])

        if text[0] == text[lenText - 1]:
            # 返回递归调用的结果,让值逐层传递到顶层
            return palindrome(text[1:lenText - 1])

        else:
            return -1


print(palindrome("tesseet"))  # 现在会输出1
print(palindrome("test"))     # 会输出-1

你的理解没有偏差,只是递归逻辑里遗漏了返回值的传递,导致成功场景下的返回值无法传递到顶层。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:45:38