有三个柱子ABC
,A
柱子上有5
个圆盘。
这5
个圆盘,从上到下的排列方式是从小到大的,可以依次编号为1、2、3、4、5
。
问题是要你把A
柱子上的圆盘全部移动到C
上面。
具体要求:
- 每次只能移动一个圆盘。
- 可以任意使用这三个柱子,但每个圆盘只能放在比它大的圆盘上。
解决方案:递归。
我们定义一个函数表示移动,move(n, from, to, by)
。
比如move(5, 'A', 'C', 'B')
表示A
柱子有5
个圆盘,通过B
柱子,然后全部移动到C
柱子上。
首先想办法把前4
个移动到B
上,
然后把最大的那个移动从A
移动到C
上,
然后想办法再把B
上那4个移动到C
上。
“想办法”中的“办法”就是同样的思路,这个思路就是递归的。
用Js
代码实现如下:
let count = 0;
function move(n, from, to, by) {
if (n == 0) return;
count ++;
move(n - 1, from, by, to);
console.log('把编号' + n + '的圆盘从' + from + '移动到' + to + '上');
move(n - 1, by, to, from);
}
move(3, 'A', 'C', 'B');
console.log('用了' + count + '步');
转载自 https://www.qdfuns.com/article/17398/28d67c8db93898138e69a0ea837e21f2.html