汉诺塔问题

Eddy 发布于2013-3-21 10:10:32 分类: 技术心得 已浏览loading 网友评论0条 我要评论

 我个人觉得对于如何去用递归的思想解决问题,关键在于从最根本点思考一个问题,先不用管小的实现过程。

比如经典的汉诺塔问题,其实很简单,先不用去想一个个盘子怎么去移动,只要知道:

初始状态:A上有n个盘子,B为空,C为空。

第一步,把A上的n-1个盘子移动到B;第二步,把A上的第n个盘子移动到C;第三步,把B上的n-1个盘子移动到C。搞定!

假设实现每次移动操作的函数为move($a,$b,$c,$n),则php实现代码如下:

 

<?php

$n = isset($_GET['num']) && is_numeric($_GET['num']) ? $_GET['num'] : 1;

function move($a,$b,$c,$n){

if ($n === 1) {

echo "move disk $n from $a to $c <br />";

}else{

move($a,$c,$b,$n-1);

echo "move disk $n from $a to $c <br />";

move($b,$a,$c,$n-1);

}

}

move('A','B','C',$n);

取$n=3,http://studyphp.cc/1226/03.php?num=3。结果如下:

move disk 1 from A to C 
move disk 2 from A to B 
move disk 1 from C to B 
move disk 3 from A to C 
move disk 1 from B to A 
move disk 2 from B to C 
move disk 1 from A to C

 

已经有(0)位网友发表了评论,你也评一评吧!
原创文章如转载,请注明:转载自Eddy Blog
原文地址:http://www.rrgod.com/technique/874.html     欢迎订阅Eddy Blog

记住我的信息,下次不用再输入 欢迎给Eddy Blog留言