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

请求解释递归实现整数回文检测代码的调用栈运行逻辑

回文数检测递归代码调用栈工作流程

核心设计前提

  • 所有递归调用的num都是值传递,每层有独立副本,递归向下入栈的过程中不断做//10去掉最后一位,逐层拆分直到只剩第一位
  • dupNum用列表存储是利用Python可变对象传引用的特性,所有递归层共享同一个实例,用来在递归向上出栈的过程中从后往前拆分数字

以输入n=12321为例的完整调用栈流程

我们按递归「向下入栈」→「触底返回」→「向上出栈执行剩余逻辑」的顺序梳理:

  1. 最上层isPal(12321)执行:跳过负数判断,生成dupNum = [12321],调用isPalUtil(12321, [12321])入栈,当前栈:[isPalUtil(12321, [12321])]
  2. 第一层isPalUtil:num=12321不是个位数,调用isPalUtil(12321//10=1232, [12321])入栈,当前栈:[isPalUtil(12321, ...), isPalUtil(1232, ...)]
  3. 第二层isPalUtil:num=1232不是个位数,调用isPalUtil(1232//10=123, [12321])入栈,当前栈:[isPalUtil(12321, ...), isPalUtil(1232, ...), isPalUtil(123, ...)]
  4. 第三层isPalUtil:num=123不是个位数,调用isPalUtil(123//10=12, [12321])入栈,当前栈:[isPalUtil(12321, ...), isPalUtil(1232, ...), isPalUtil(123, ...), isPalUtil(12, ...)]
  5. 第四层isPalUtil:num=12不是个位数,调用isPalUtil(12//10=1, [12321])入栈,当前栈:[isPalUtil(12321, ...), isPalUtil(1232, ...), isPalUtil(123, ...), isPalUtil(12, ...), isPalUtil(1, ...)]
  6. 第五层isPalUtil(递归终止层):num=1是个位数,比较1 == 12321%10=1,返回True,出栈,当前栈回到:[isPalUtil(12321, ...), isPalUtil(1232, ...), isPalUtil(123, ...), isPalUtil(12, ...)]

开始向上逐层执行剩余逻辑:
7. 回到第四层isPalUtil(num=12):上一层返回True,继续执行:

  • 共享变量更新:dupNum[0] = 12321//10 = 1232
  • 对应位比较:12%10=2 == 1232%10=2,返回True,出栈,当前栈回到:[isPalUtil(12321, ...), isPalUtil(1232, ...), isPalUtil(123, ...)]
  1. 回到第三层isPalUtil(num=123):上一层返回True,继续执行:
    • 共享变量更新:dupNum[0] = 1232//10 = 123
    • 对应位比较:123%10=3 == 123%10=3,返回True,出栈,当前栈回到:[isPalUtil(12321, ...), isPalUtil(1232, ...)]
  2. 回到第二层isPalUtil(num=1232):上一层返回True,继续执行:
    • 共享变量更新:dupNum[0] = 123//10 = 12
    • 对应位比较:1232%10=2 == 12%10=2,返回True,出栈,当前栈回到:[isPalUtil(12321, ...)]
  3. 回到第一层isPalUtil(num=12321):上一层返回True,继续执行:
    • 共享变量更新:dupNum[0] = 12//10 = 1
    • 对应位比较:12321%10=1 == 1%10=1,返回True,出栈
      最终isPal函数拿到True结果,输出Yes。

反例输入n=12的调用栈流程

  1. isPal(12)生成dupNum=[12],调用isPalUtil(12, [12])入栈
  2. 第一层isPalUtil:num=12不是个位数,调用isPalUtil(1, [12])入栈
  3. 第二层isPalUtil(终止层):num=1是个位数,比较1 == 12%10=2,返回False,出栈
  4. 回到第一层isPalUtil,拿到下层返回的False,直接返回False,不需要执行后续逻辑,最终输出No。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:36:00