Maison  >  Questions et réponses  >  le corps du texte

javascript - Renseignez-vous sur l'algorithme de la Tour de Hanoï

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.

漂亮男人漂亮男人2710 Il y a quelques jours2599

répondre à tous(2)je répondrai

  • phpcn_u1582

    phpcn_u15822017-05-19 10:45:07

    Vous pouvez consulter la séquence de Fibonacci pour cela. La Tour de Hanoï est l'algorithme de Fibonacci

    .

    répondre
    0
  • phpcn_u1582

    phpcn_u15822017-05-19 10:45:07

    Si vous avez besoin d'une telle fonction de rappel, ce sera plus compliqué que ce que vous avez actuellement et vous devrez enregistrer le statut.
    Par exemple, dans votre exemple, il y a 6 disques, et il y a 3 disques sur le premier pilier, cela peut être 456, ou cela peut être 135. Vous devez clarifier l'état actuel, puis terminer les étapes puis le décomposer de de haut en bas.

    if 最大圆盘不在目标圆柱上 {
      if 最大圆盘不能直接移动到目标圆柱 {
        其他圆盘移动到“中间”圆柱(规模减一)  //非最大圆盘所在圆柱和目标圆柱
      } 
      移动最大圆盘到目标圆柱
    }
    移动其他圆盘到目标圆柱(规模减一)

    répondre
    0
  • Annulerrépondre