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

汉诺塔函数执行顺序疑问:为何输出起始为disk 1?

汉诺塔递归代码输出顺序解析

你搞反了递归的执行顺序——这段代码里,打印操作夹在两次递归调用中间,程序会先把所有上层的递归调用跑完,才会执行当前n对应的打印语句。

拿n=4的调用举例:

  1. 调用towersOfHanoi(4, "A", "C", "B")时,第一步是执行towersOfHanoi(3, "A", "B", "C"),此时不会打印任何内容,而是继续往更深的递归层级走。
  2. 进入towersOfHanoi(3, "A", "B", "C"),又先执行towersOfHanoi(2, "A", "C", "B"),仍然不打印。
  3. 进入towersOfHanoi(2, "A", "C", "B"),先执行towersOfHanoi(1, "A", "B", "C"),继续递归。
  4. 进入towersOfHanoi(1, "A", "B", "C"),先执行towersOfHanoi(0, "A", "C", "B"),这个调用因为n=0直接返回。
  5. 回到towersOfHanoi(1, "A", "B", "C"),终于执行打印语句,输出Move disk 1 from rod A to rod B.——这就是你看到的第一行日志。
  6. 之后程序才会依次回溯执行上层的打印:disk2、disk1、disk3、disk1、disk2、disk1,最后才会打印disk4的移动操作。

简单说:递归是先“钻”到最小的圆盘(disk1),完成它的移动逻辑后,才会往上处理更大的圆盘。disk4的移动要等上面3个圆盘都从A移到B之后才会执行,所以它的打印是倒数第二行。

附上你的代码:

function towersOfHanoi(n,f,t,a) {
    if (n==0){
        return;
    }
    towersOfHanoi(n-1, f, a, t);
        console.log("Move disk "+ n + " from rod " + f +" to rod "+ t +".")
    towersOfHanoi(n-1, a, t, f);
    
}

let N = 4;
towersOfHanoi(N,"A","C","B");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 19:05:10