河内可汗学院塔递归步骤3

时间:2018-11-23 16:26:58

标签: khan-academy

在递归解决河内的第三步中,我需要帮助,它说我的所有主张都没有通过,我看了其他人的回答,这和我的一样。我的代码是Program.assertEqual(hanoi.isSolved("B"),true);,这就是他们所说的错误

1 个答案:

答案 0 :(得分:0)

步骤1:

var solveHanoi = function(numDisks, fromPeg, toPeg) {
if (numDisks===0){
return;
}
// recursive case:

};

通过在函数中编写if语句,可以使您拥有0张光盘。

第2步:

var solveHanoi = function(numDisks, fromPeg, toPeg) {
if (numDisks===0){
return;
}
// recursive case:
var sparePeg = hanoi.getSparePeg(fromPeg, toPeg);
solveHanoi(numDisks-1, fromPeg, sparePeg);
};

现在创建一个名为“ sparePeg”的变量,然后在函数“ solveHanoi”中写入3个参数,如上面的代码。

第3步:

var solveHanoi = function(numDisks, fromPeg, toPeg) {
if (numDisks===0){
return;
}
// recursive case:
var sparePeg = hanoi.getSparePeg(fromPeg, toPeg);
hanoi.moveDisk(fromPeg, toPeg);
solveHanoi(numDisks-1, fromPeg, sparePeg);
};

现在添加带有fromPeg和sparePeg参数的'hanoi.moveDisk()'函数。

步骤4和5:

var solveHanoi = function(numDisks, fromPeg, toPeg) {
if (numDisks===0){
return;
}
// recursive case:

else{
var sparePeg = hanoi.getSparePeg(fromPeg, toPeg);
solveHanoi(numDisks-1, fromPeg, sparePeg);
hanoi.moveDisk(fromPeg, toPeg);
solveHanoi(numDisks-1, sparePeg, toPeg);
} 
};
solveHanoi(5, "A", "B");
Program.assertEqual(hanoi.isSolved("B"),true);

这是最简单的一个。您要做的就是取消注释最后两行代码。

那您就完蛋了!