如何用 JavaScript 实现汉诺塔的递归算法?
时间: 2024-09-24 20:05:06 浏览: 76
在JavaScript中,汉诺塔是一个经典的递归问题,它涉及到将一堆盘子从一个柱子移动到另一个柱子,但任何时候都不能把大盘子放在小盘子上。下面是使用递归来解决这个问题的基本步骤:
1. 定义函数:首先创建一个名为`hanoi`的递归函数,接受三个参数:源柱子(`from`)、目标柱子(`to`)和辅助柱子(`aux`)。
```javascript
function hanoi(n, from, to, aux) {
```
2. 基本情况:当只有1个盘子时,直接移动即可,不需要辅助柱子。
```javascript
if (n === 1) {
console.log('Move disk 1 from', from, 'to', to);
return;
}
```
3. 递归策略:对于包含n-1个盘子的情况,先将它们从源柱子移动到辅助柱子,然后移动最大的盘子,最后将剩余的盘子从辅助柱子移动到目标柱子。
```javascript
// 递归转移 n-1 个盘子到辅助柱子
hanoi(n - 1, from, aux, to);
// 移动最大的盘子
console.log('Move disk', n, 'from', from, 'to', to);
// 最后将辅助柱子的 n-1 个盘子移到目标柱子
hanoi(n - 1, aux, to, from);
```
完整代码示例:
```javascript
function hanoi(n, from, to, aux) {
if (n === 1) {
console.log('Move disk 1 from', from, 'to', to);
return;
}
hanoi(n - 1, from, aux, to);
console.log('Move disk', n, 'from', from, 'to', to);
hanoi(n - 1, aux, to, from);
}
// 调用函数,例如有3个盘子,从A移动到C,借助B
hanoi(3, 'A', 'C', 'B');
```
阅读全文