Maison > développement back-end > tutoriel php > 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中世界最好的语言
Libérer: 2023-03-18 07:18:02
original
1204 Les gens l'ont consulté

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;
?>
Copier après la connexion


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
Copier après la connexion


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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal