递归回文函数返回值-1/1未打印的原因咨询
递归回文判断函数返回值未正确打印的原因
你的问题出在递归调用时没有返回子调用的结果,导致只有首尾字符不匹配的场景能返回-1并被打印,而匹配成功的场景下,最内层递归返回的1无法传递到顶层函数,最终顶层函数默认返回None。
具体代码问题分析
看这段关键代码:
if text[0] == text[lenText - 1]: palindrome(text[1:lenText - 1]) # 这里没有return
当首尾字符匹配时,函数会递归调用自身处理中间子串,但没有把递归调用的返回值传递回去。比如输入"tesseet"的递归流程:
- 第一层调用处理"tesseet",首尾匹配,调用处理"esse",但没有返回这个调用的结果,执行完后第一层函数没有返回值,默认返回
None - 第二层调用处理"esse",首尾匹配,调用处理"ss",同样没返回,返回
None - 第三层调用处理"ss",首尾匹配,调用处理空字符串,没返回,返回
None - 第四层处理空字符串,返回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
相关产品推荐
相关产品推荐

