参考递归第一节,设计一个程序solve_hanoi_tower(disks, from, to, use)
,打印汉诺塔的移动步骤, 比如移动3个:
solve_hanoi_tower(['i', 'j', 'k'],'A', 'B', 'C')
// i,j,k代表碟子,k最小,i最大
// A,B,C是三个位置
输出:
k A->B
j A->C
k B->C
i A->B
k C->A
j C->B
k A->B
答案: 练习在递归中生成结果。
function moveTower(disks, k, n, from, to, use) {
if(n === 1) {
console.log(`${disks[k]} ${from}->${to}`)
return
}
moveTower(disks, k + 1, n - 1, from ,use, to)
console.log(`${disks[k]} ${from}->${to}`)
moveTower(disks, k + 1, n - 1, use , to, from)
}
function solve_hanoi_tower(disks, from, to, use) {
moveTower(disks, 0, disks.length, from, to, use)
}