文章目录
  1. 1. 前言
  2. 2. 理解
  3. 3.
  4. 4. 代码实现
  5. 5. 思考
  6. 6. Reference

前言

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

理解

整体的概念 数学归纳法

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

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

代码实现

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

1
2
3
4
5
6
7
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

知乎

文章目录
  1. 1. 前言
  2. 2. 理解
  3. 3.
  4. 4. 代码实现
  5. 5. 思考
  6. 6. Reference