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

Python递归判断回文字符串代码遇回文返回None的原因解析

问题原因与解决方法

核心问题:递归调用未返回结果

你代码里的递归分支犯了一个关键错误:当首尾字符相等时,你只调用了palindrome(w),但没有把这个递归调用的结果返回给上层函数。

举个实际执行的例子,假设输入是"abba":

  1. 第一次调用palindrome(['a','b','b','a']),首尾都是a,删除首尾后调用palindrome(['b','b'])
  2. 第二次调用palindrome(['b','b']),首尾都是b,删除首尾后调用palindrome([])
  3. 第三次调用palindrome([]),满足长度为0的条件,返回'yes'
  4. 但第二次调用里,只是执行了palindrome([]),没有把这个'yes'返回出去,所以第二次调用结束后默认返回None
  5. 同理,第一次调用也没有接收第二次调用的结果,最终返回None

修正代码

只需要在递归调用的地方加上return,让结果逐层传递回去:

def palindrome(w):
    if len(w)==0 or len(w)==1:
        return 'yes'
    else:
        if w[0]==w[-1]:
            del w[0]
            del w[-1]
            return palindrome(w)  # 新增return,传递递归结果
        else:
            return 'no'           
s=input()
w=list(s.replace(" ",""))
print(palindrome(w))

更简洁的优化方案

其实不需要修改原列表(del操作会改变原列表,容易引发副作用),可以直接用字符串/列表切片来生成新的子序列,代码更简洁安全:

def palindrome(w):
    if len(w) <= 1:
        return 'yes'
    if w[0] == w[-1]:
        return palindrome(w[1:-1])  # 用切片获取中间子序列,无需修改原数据
    else:
        return 'no'           
s=input()
w = s.replace(" ","")  # 字符串也支持切片,不用转成列表
print(palindrome(w))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 14:23:22