하노이 타워 문제를 구현하기 위해 PHP 재귀를 작성하는 방법

php中世界最好的语言
풀어 주다: 2023-03-18 07:18:02
원래의
1169명이 탐색했습니다.

이번에는 PHP를 사용하여 하노이 타워 문제를 구현하는 작은 케이스를 가져왔습니다.

하노이 타워(하노이 타워라고도 함)는 인도의 고대 전설에서 파생된 교육용 장난감입니다. 브라흐마는 세상을 창조했을 때 세 개의 다이아몬드 기둥을 만들었고, 한 기둥에는 64개의 금 원반이 아래에서 위로 크기대로 쌓여 있었습니다. 브라흐마는 브라만에게 디스크를 바닥부터 크기 순서대로 다른 기둥에 재배치하라고 명령했습니다. 또한 작은 원반에서는 원반을 확대할 수 없으며 세 개의 기둥 사이에서 한 번에 하나의 원반만 이동할 수 있다고 규정되어 있습니다. 즉, A, B, C라는 라벨이 붙은 3개의 인접한 기둥이 있습니다. 기둥 A에는 서로 다른 크기의 n개의 디스크가 아래에서 위로 피라미드 모양으로 쌓여 있습니다. 모든 디스크는 하나씩 기둥으로 이동해야 합니다. .B, 그리고 같은 열을 움직일 때마다 작은 판 위에 큰 판이 나타날 수 없습니다. 최소한 몇 번의 움직임이 필요합니까?

재귀 절차는 다음과 같습니다.

1) n-1개의 원을 A에서 C로 이동합니다

2) 나머지 원을 A에서 B로 이동
3) n-1개의 원을 C에서 B로 이동하면 완료됩니다

코드는 다음과 같습니다.

<?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;
?>
로그인 후 복사


실행 결과:

将圆盘 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
로그인 후 복사


이 사례를 읽으신 후 방법을 마스터하셨다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요. !

관련 읽기:

PHP 높은 트래픽 최적화?

PHP는 높은 웹 사이트 트래픽과 높은 동시성 문제를 어떻게 해결합니까?

PHP 제품 플래시 세일 타이밍 구현(대규모 트래픽에 대한 솔루션)

위 내용은 하노이 타워 문제를 구현하기 위해 PHP 재귀를 작성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!