前言

这个问题在大一学 C 的时候就一直纠结,再次看书遇到,就把他写下来作为笔记了!

理解

整体的概念 数学归纳法

做了张图, 目标: 将塔 SRC 移到 DST,利用 AUX 作为中转 1

抽象化: 一个汉诺塔只需要分为底层 B 和上层 A 步骤: A(SRC) => AUX; B(SRC) => DST; A(AUX) => DST;

代码实现

一旦最大一个放在底下之后就可以忽略掉了

var hanoi = function(disc, src, aux, dst) {
  if (disc > 0) {
    hanoi(disc - 1, src, dst, aux) //上层A(含多个)
    console.log("Move disc" + disc + " from " + src + " to " + dst) //下层B
    hanoi(disc - 1, aux, src, dst) //上层A(含多个)
  }
}

思考

只要能抽象出来, 递归还是有点像一种声明式函数的

Reference

知乎