手动栈模拟汉诺塔:call宏实现f与g互递归的原理问询
手动管理栈模拟汉诺塔f/g互递归的核心疑问
我正在进行C语言代码重构任务:用手动管理栈替代递归调用模拟汉诺塔问题,需将非递归汉诺塔扩展为f、g函数互递归的实现。现有代码通过call宏入栈新栈帧、ret宏出栈,实现f与g间接互调用,但我对以下核心逻辑存在疑问:
- 当前架构为何支持f与g互相调用?
- f执行
call(n-1, from, via, to)时,程序如何切换到g? - pc机制如何保证操作序列正确(如将返回值存入c1/c2)?
- 我原以为互递归需区分f、g的栈标识,但代码仅用单个
Frame结构体,无法理解pc如何路由到对应函数。
此前咨询相关AI工具仍未理清互递归的实际运行逻辑,希望得到清晰的底层解释。
内容的提问来源于stack exchange,提问作者Julie Johnson
相关产品推荐
相关产品推荐

