javascript - Renseignez-vous sur l'algorithme de la Tour de Hanoï
漂亮男人
漂亮男人 2017-05-19 10:43:07
0
2
2538

JS utilise la récursivité pour mettre en œuvre les étapes permettant de terminer la Tour de Hanoï. Je pense que de nombreux étudiants peuvent le faire.
Pendant mon temps libre, j'ai écrit un jeu Tower of Hanoi. Il contient une fonction de rappel. Lorsque l'utilisateur clique sur le rappel, le programme utilise la récursivité pour implémenter une étape d'achèvement, puis exploite les éléments de la page pour l'implémenter en fonction. cette étape.
Le code partiel est le suivant :

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' ] // 大概意思就是想从第一个圆柱取最上面那个圆盘放到第三个圆柱...

Tout va bien. Le problème maintenant est qu'il ne peut s'agir que d'un nouveau niveau. Une liste d'étapes est générée lorsque l'utilisateur n'a déplacé aucun disque, par exemple, la première étape est maintenant Il y en a. 3 disques sur le premier cylindre, 2 disques sur le deuxième et 1 disque sur le troisième. L'utilisateur est perplexe et ne sait pas quoi faire ensuite, il clique sur le bouton de rappel,Comment régler. selon la situation actuelle ? Qu'en est-il de la situation pour générer l'algorithme pour les étapes suivantes ?
J'ai honte de dire que ce jeu a été écrit il y a six mois. Jusqu'à présent, la fonction de rappel n'est pas terminée et je n'en ai aucune idée.

漂亮男人
漂亮男人

répondre à tous (2)
phpcn_u1582

这个你可以看斐波拉契数列 汉诺塔就是斐波拉契算法

    phpcn_u1582

    如果需要这样的提醒功能,比你现在的复杂一些,需要纪录状态。
    比如你这个例子是6个圆盘,第一根柱子上3个圆盘,有可能是456,也有可能是135,你需要明确现在的状态,然后完成步骤再从上向下分解。

    if 最大圆盘不在目标圆柱上 { if 最大圆盘不能直接移动到目标圆柱 { 其他圆盘移动到“中间”圆柱(规模减一) //非最大圆盘所在圆柱和目标圆柱 } 移动最大圆盘到目标圆柱 } 移动其他圆盘到目标圆柱(规模减一)
      Derniers téléchargements
      Plus>
      effets Web
      Code source du site Web
      Matériel du site Web
      Modèle frontal
      À propos de nous Clause de non-responsabilité Sitemap
      Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!