<?php
$num = 10;
$count = hanoi( $num, 'A', 'B', 'C' );
echo "一共移动$count 次.";
/**
* 如果只有一个盘子, 则直接从起始柱移动到目标柱
* 否则, 先把 n - 1 个盘子 从起始柱经过目标柱移动到中间柱上
* 然后把第 n 个盘子 从起始柱移动到目标盘子
* 再把 中间柱上的 n - 1 个盘子 从中间柱经过起始柱移动到目标柱上.
* 移动总次数 = 2 ^ n - 1
*/
function hanoi( $num, $start, $mid, $end )
{
static $count = 0;
if( $num == 1 )
{
echo "$num: $start\t>>\t$end\n";
$count ++;
} else
{
hanoi( $num - 1, $start, $end, $mid );
echo "$num: $start\t>>\t$end\n";
$count ++;
hanoi( $num -1, $mid, $start, $end );
}
return $count;
}
汉诺塔小程序
最新推荐文章于 2024-08-27 11:23:01 发布