JS verwendet Rekursion, um die Schritte zur Fertigstellung des Turms von Hanoi zu implementieren.
In meiner Freizeit habe ich ein Tower of Hanoi-Spiel geschrieben. Es enthält eine Erinnerungsfunktion. Wenn der Benutzer auf die Erinnerung klickt, implementiert das Programm einen Abschlussschritt und führt ihn dann entsprechend aus dieser Schritt.
Teilcode lautet wie folgt:
var moves = []; // 存放完成步骤
/**
* @param disc 当前关卡 (实际上也就是圆盘数量)
* @param discs1 第一根圆柱
* @param discs2 第二根圆柱
* @param discs3 第三根圆柱
*/
function hanoiArithmetic(disc, discs1, discs2, discs3) {
if (disc > 0) {
hanoiArithmetic(disc - 1, discs1, discs3, discs2);
moves.push(discs1 + '>' + discs3);
hanoiArithmetic(disc - 1, discs2, discs1, discs3);
}
}
hanoiArithmetic(4, 'discs1', 'discs2', 'discs3');
console.log(moves);
// 最后得到这样一个步骤列表
[ 'discs1>discs3',
'discs1>discs2',
'discs3>discs2',
'discs1>discs3',
'discs2>discs1',
'discs2>discs3',
'discs1>discs3' ] // 大概意思就是想从第一个圆柱取最上面那个圆盘放到第三个圆柱...
Alles ist in Ordnung. Das Problem ist, dass dies nur eine neue Ebene sein kann. Wenn der Benutzer beispielsweise keine Datenträger verschoben hat, wird jetzt eine Schrittliste erstellt Es gibt 3 Scheiben auf dem ersten Zylinder, 2 Scheiben auf dem zweiten und 1 Scheibe auf dem dritten. Der Benutzer ist ratlos und weiß nicht, was er als Nächstes tun soll. Er klickt auf die Erinnerungsschaltfläche Wie Wie sieht es mit der Situation aus, um den Algorithmus für nachfolgende Schritte zu generieren?
Ich schäme mich zu sagen, dass dieses Spiel vor einem halben Jahr geschrieben wurde. Bisher ist die Erinnerungsfunktion noch nicht abgeschlossen und ich habe überhaupt keine Ahnung.
这个你可以看斐波拉契数列 汉诺塔就是斐波拉契算法
如果需要这样的提醒功能,比你现在的复杂一些,需要纪录状态。
比如你这个例子是6个圆盘,第一根柱子上3个圆盘,有可能是456,也有可能是135,你需要明确现在的状态,然后完成步骤再从上向下分解。