问题描述
a b c 三个柱子,起初在 a 上有 n 个按大小关系顺序安放的盘子,需要全部移动到 c 上。
移动规则:在小圆盘上不能放大圆盘,在 a b c 三根柱子之间一次只能移动一个圆盘。
初始状态如下:
图 1 : 初始状态
目标状态如下:
图 2 : 目标状态
解决思路
图 3 : 移动过程
代码实例
#include <stdio.h>
void message(int n, char from, char to) {
printf("将 %d 号盘, 从 %c 移动到 %c\n", n, from, to);
return;
}
void hanoi(int n, char a, char b, char c) {
if (n == 1) {
message(n, a, c);
return;
}
hanoi(n - 1, a, c, b);
message(n, a, c);
hanoi(n - 1, b, a, c);
return;
}
int main() {
hanoi(3, 'a', 'b', 'c');
return 0;
}
function message(n, from, to) {
console.log(`将 ${n} 号盘, 从 ${from} 移动到 ${to}`);
}
function hanoi(n, a, b, c) {
if (n == 1) {
message(n, a, c);
return;
}
hanoi(n - 1, a, c, b);
message(n, a, c);
hanoi(n - 1, b, a, c);
return;
}
hanoi(3, "a", "b", "c");