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

汉诺塔C语言递归代码输出C为源柱移动步骤的逻辑疑问

问题原因拆解

你之所以会有这个疑问,是因为忽略了递归调用的参数是随每一层函数的形参动态变化的,并不是一直沿用main函数里传入的初始值,实际上确实存在将'C'作为source_peg入参的调用,具体调用流程如下:

完整调用栈推导(输入num=3时)

  1. 主函数调用 move_disks(3, 'A', 'B', 'C'),对应形参:num=3,source_peg='A',aux_peg='B',to_peg='C'
    • 因为num≠1,优先执行第一个递归逻辑:将num-1个盘子从源柱借目标柱移到辅助柱,所以调用 move_disks(2, 'A', 'C', 'B')
  2. 进入move_disks(2, 'A', 'C', 'B'),对应形参:num=2,source_peg='A',aux_peg='C',to_peg='B'
    • num≠1,先执行第一个递归调用 move_disks(1, 'A', 'B', 'C')
      • 该调用num=1,直接输出第一行结果:Move disk 1 from peg A to peg C.,返回上层
    • 打印当前层num=2的移动:Move disk 2 from peg A to peg B.(第二行输出)
    • 执行第二个递归逻辑:将num-1个盘子从辅助柱借源柱移到目标柱,对应调用参数为move_disks(num-1, aux_peg, source_peg, to_peg),当前层的aux_peg是'C',所以实际调用为 move_disks(1, 'C', 'A', 'B')
      • 该调用num=1,入参source_peg='C'、to_peg='B',直接输出你疑惑的第三行结果:Move disk 1 from peg C to peg B.,返回上层
  3. 回到初始的move_disks(3, 'A', 'B', 'C'),继续执行后续逻辑即可生成剩下的输出。

内容的提问来源于stack exchange,提问作者piyush kumar singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:39:03