Maison  >  Article  >  développement back-end  >  Comment écrire une récursion PHP pour implémenter le problème de la Tour de Hanoï

Comment écrire une récursion PHP pour implémenter le problème de la Tour de Hanoï

php中世界最好的语言
php中世界最好的语言original
2017-12-20 16:08:311170parcourir

Cette fois, je vous apporte un petit cas, utilisant PHP pour implémenter le problème de la Tour de Hanoï.

La Tour de Hanoï (également connue sous le nom de Tour de Hanoï) est un jouet éducatif dérivé d'une ancienne légende indienne. Lorsque Brahma a créé le monde, il a construit trois piliers de diamant. Sur un pilier, 64 disques d'or ont été empilés par ordre de taille, de bas en haut. Brahma a ordonné au brahmane de réorganiser les disques sur un autre pilier par ordre de taille à partir du bas. Il est également stipulé que le disque ne peut pas être agrandi sur le petit disque et qu'un seul disque peut être déplacé entre les trois piliers à la fois. En bref, il y a trois piliers adjacents, étiquetés A, B et C. Sur le pilier A, n disques de tailles différentes sont empilés en forme de pyramide de bas en haut. Tous les disques doivent être déplacés un par un vers le pilier. .B, et à chaque fois que vous déplacez la même colonne, la grande plaque ne peut pas apparaître au-dessus de la petite plaque. Combien de mouvements faut-il au moins ?

RécursifLa procédure est la suivante :

1) Déplacer n-1 cercles de A à C
2) Déplacer celui restant de A à B
3) Déplacez ensuite n-1 éléments de C vers B, et complétez le

code comme suit :

<?php
//将所有圆盘从a移到b
function hanuota($n,$a,$b,$c){
  global $step;
  if($n==1){
    $step++;
    echo "将圆盘 $n 从 $a 柱子 到 $b 柱子 <br />";
  }else{
    hanuota($n-1,$a,$c,$b);
    $step++;
    echo "将圆盘 $n 从 $a 柱子 到 $b 柱子 <br />";
    hanuota($n-1,$c,$b,$a);
  }
}
//移动的次数
$step = 0;
hanuota(4, &#39;A&#39;, &#39;B&#39;, &#39;C&#39;);
echo "移动次数:" . $step;
?>


Résultat d'exécution :

将圆盘 1 从 A 柱子 到 C 柱子
将圆盘 2 从 A 柱子 到 B 柱子
将圆盘 1 从 C 柱子 到 B 柱子
将圆盘 3 从 A 柱子 到 C 柱子
将圆盘 1 从 B 柱子 到 A 柱子
将圆盘 2 从 B 柱子 到 C 柱子
将圆盘 1 从 A 柱子 到 C 柱子
将圆盘 4 从 A 柱子 到 B 柱子
将圆盘 1 从 C 柱子 到 B 柱子
将圆盘 2 从 C 柱子 到 A 柱子
将圆盘 1 从 B 柱子 到 A 柱子
将圆盘 3 从 C 柱子 到 B 柱子
将圆盘 1 从 A 柱子 到 C 柱子
将圆盘 2 从 A 柱子 到 B 柱子
将圆盘 1 从 C 柱子 到 B 柱子
移动次数:15


Je pense que vous maîtrisez les méthodes après avoir lu ces cas. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

Lecture connexe :

Optimisation du trafic PHP élevé ?

Comment PHP résout-il le problème du trafic important sur les sites Web et de la concurrence élevée

Mise en œuvre du timing des ventes flash des produits PHP ( solution au gros trafic)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn