为什么我编写的Python数字反转函数运行时会产生无限循环?
问题定位
你的代码出现无限循环和输出不符合预期的核心原因有两个:
- 递归终止条件完全错误:Python中只有布尔值
False和x==False的判断结果为真,你把数值转成字符串x后,哪怕x是空字符串"",x==False的返回结果也是False,永远触发不了终止逻辑。函数会一直递归调用order(x[1:]),当x为空之后,x[1:]还是空字符串,递归永远不会停止,形成无限循环。 - 终止逻辑返回值错误:就算你触发了终止条件返回
None,后续执行order(x[1:])+(x[0])时会出现类型错误,None无法和字符串执行拼接操作。
修复方案
把递归终止条件修改为判断字符串是否为空,空字符串直接返回空即可,修正后代码如下:
def order(num): x = str(num) # 修正终止条件和返回值 if x == "": return "" else: return order(x[1:]) + x[0] print(order(12345))
运行后输出结果为54321,符合预期。
逻辑说明
递归执行的拼接逻辑如下:
- 第一层调用:
order("12345")返回order("2345") + "1" - 第二层调用:
order("2345")返回order("345") + "2" - 第三层调用:
order("345")返回order("45") + "3" - 第四层调用:
order("45")返回order("5") + "4" - 第五层调用:
order("5")返回order("") + "5" - 最底层调用:
order("")返回空字符串"" - 逐层回代拼接后最终得到字符串
"54321"
内容的提问来源于stack exchange,提问作者bob
相关产品推荐
相关产品推荐

