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

递归判断回文字符串遇变量未赋值错误及返回值异常问题

回文字符串递归判断的问题与修复

问题1:UnboundLocalError错误

你的初始代码触发UnboundLocalError,核心原因是递归分支未对palindrome变量赋值。当字符串首尾字符相等时,你仅递归调用了is_palindrome(s),但当前函数的palindrome变量从未被定义,执行到return palindrome时自然触发错误。

问题代码片段:

if s[0] == s[-1]:
    print("leftmost = rightmost")
    newstring = s[1:]
    newstring = newstring[:-1]
    s = newstring
    is_palindrome(s)  # 仅调用递归,未将返回值赋值给palindrome

问题2:始终返回True

修改后的代码将palindrome初始设为True,但递归调用时,内层函数修改的是自身栈帧里的局部palindrome变量,外层函数的palindrome完全不受影响。哪怕内层判断出不是回文,外层的palindrome仍保持初始的True,最终返回结果永远为True。

正确的递归实现(满足单return语句要求)

递归的核心是利用递归调用的返回值传递结果,无需额外定义palindrome变量。直接通过return把基准情况和递归分支的结果向上传递:

def is_palindrome(s):
    if len(s) <= 1:
        return True
    # 首尾相等则递归判断子串,否则直接返回False
    return s[0] == s[-1] and is_palindrome(s[1:-1])

如果需要保留打印调试信息,同时满足单return要求,可调整为:

def is_palindrome(s):
    if len(s) <= 1:
        print("is palindrome")
        return True
    print("length not 1, checking again")
    if s[0] == s[-1]:
        print("leftmost = rightmost")
        return is_palindrome(s[1:-1])
    else:
        print("not palindrome")
        return False

该版本每个分支都有明确的return语句,既不会出现变量未定义问题,也能正确传递递归调用的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:27:54