Wie schreibe ich eine PHP-Rekursion, um das Tower of Hanoi-Problem zu implementieren?

php中世界最好的语言
Freigeben: 2023-03-18 07:18:02
Original
1185 Leute haben es durchsucht

Dieses Mal bringe ich Ihnen einen kleinen Fall, bei dem PHP verwendet wird, um das Problem des Turms von Hanoi zu implementieren.

Der Turm von Hanoi (auch bekannt als der Turm von Hanoi) ist ein Lernspielzeug, das auf einer alten Legende in Indien basiert. Als Brahma die Welt erschuf, schuf er drei Diamantsäulen. Auf einer Säule wurden 64 Goldscheiben in der Reihenfolge ihrer Größe von unten nach oben gestapelt. Brahma befahl dem Brahmin, die Scheiben auf einer anderen Säule in der Reihenfolge ihrer Größe von unten neu anzuordnen. Es ist auch festgelegt, dass die Scheibe auf der kleinen Scheibe nicht vergrößert werden kann und jeweils nur eine Scheibe zwischen den drei Säulen bewegt werden kann. Kurz gesagt, es gibt drei benachbarte Säulen mit den Bezeichnungen A, B und C. Auf der Säule A sind n Scheiben unterschiedlicher Größe in Pyramidenform von unten nach oben gestapelt. Alle Scheiben müssen einzeln zur Säule bewegt werden .B, und jedes Mal, wenn Sie dieselbe Spalte verschieben, kann die große Platte nicht über der kleinen Platte erscheinen. Wie viele Bewegungen sind mindestens erforderlich?

RekursivDas Verfahren ist wie folgt:

1) Verschiebe n-1 Kreise von A nach C
2) Verschiebe den verbleibenden von A nach B
3) Verschieben Sie dann n-1 Elemente von C nach B und vervollständigen Sie den

-Code wie folgt:

<?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;
?>
Nach dem Login kopieren


Laufendes Ergebnis:

将圆盘 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
Nach dem Login kopieren


Ich glaube, dass Sie die Methoden beherrschen, nachdem Sie diese Fälle gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Verwandte Lektüre:

PHP-Optimierung für hohen Datenverkehr?

Wie löst PHP das Problem des hohen Website-Verkehrs und der hohen Parallelität?

PHP-Produkt-Flash-Sale-Timing-Implementierung ( Lösung für großen Datenverkehr)

Das obige ist der detaillierte Inhalt vonWie schreibe ich eine PHP-Rekursion, um das Tower of Hanoi-Problem zu implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage