请求解释递归实现整数回文检测代码的调用栈运行逻辑
回文数检测递归代码调用栈工作流程
核心设计前提
- 所有递归调用的
num都是值传递,每层有独立副本,递归向下入栈的过程中不断做//10去掉最后一位,逐层拆分直到只剩第一位 dupNum用列表存储是利用Python可变对象传引用的特性,所有递归层共享同一个实例,用来在递归向上出栈的过程中从后往前拆分数字
以输入n=12321为例的完整调用栈流程
我们按递归「向下入栈」→「触底返回」→「向上出栈执行剩余逻辑」的顺序梳理:
- 最上层
isPal(12321)执行:跳过负数判断,生成dupNum = [12321],调用isPalUtil(12321, [12321])入栈,当前栈:[isPalUtil(12321, [12321])] - 第一层isPalUtil:num=12321不是个位数,调用
isPalUtil(12321//10=1232, [12321])入栈,当前栈:[isPalUtil(12321, ...), isPalUtil(1232, ...)] - 第二层isPalUtil:num=1232不是个位数,调用
isPalUtil(1232//10=123, [12321])入栈,当前栈:[isPalUtil(12321, ...), isPalUtil(1232, ...), isPalUtil(123, ...)] - 第三层isPalUtil:num=123不是个位数,调用
isPalUtil(123//10=12, [12321])入栈,当前栈:[isPalUtil(12321, ...), isPalUtil(1232, ...), isPalUtil(123, ...), isPalUtil(12, ...)] - 第四层isPalUtil:num=12不是个位数,调用
isPalUtil(12//10=1, [12321])入栈,当前栈:[isPalUtil(12321, ...), isPalUtil(1232, ...), isPalUtil(123, ...), isPalUtil(12, ...), isPalUtil(1, ...)] - 第五层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, ...)]
- 回到第三层isPalUtil(num=123):上一层返回True,继续执行:
- 共享变量更新:
dupNum[0] = 1232//10 = 123 - 对应位比较:
123%10=3 == 123%10=3,返回True,出栈,当前栈回到:[isPalUtil(12321, ...), isPalUtil(1232, ...)]
- 共享变量更新:
- 回到第二层isPalUtil(num=1232):上一层返回True,继续执行:
- 共享变量更新:
dupNum[0] = 123//10 = 12 - 对应位比较:
1232%10=2 == 12%10=2,返回True,出栈,当前栈回到:[isPalUtil(12321, ...)]
- 共享变量更新:
- 回到第一层isPalUtil(num=12321):上一层返回True,继续执行:
- 共享变量更新:
dupNum[0] = 12//10 = 1 - 对应位比较:
12321%10=1 == 1%10=1,返回True,出栈
最终isPal函数拿到True结果,输出Yes。
- 共享变量更新:
反例输入n=12的调用栈流程
isPal(12)生成dupNum=[12],调用isPalUtil(12, [12])入栈- 第一层isPalUtil:num=12不是个位数,调用
isPalUtil(1, [12])入栈 - 第二层isPalUtil(终止层):num=1是个位数,比较
1 == 12%10=2,返回False,出栈 - 回到第一层isPalUtil,拿到下层返回的False,直接返回False,不需要执行后续逻辑,最终输出No。
内容的提问来源于stack exchange,提问作者zetta
相关产品推荐
相关产品推荐

