我个人觉得对于如何去用递归的思想解决问题,关键在于从最根本点思考一个问题,先不用管小的实现过程。
比如经典的汉诺塔问题,其实很简单,先不用去想一个个盘子怎么去移动,只要知道:
初始状态: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。