PHP递归实现汉诺塔问题的方法示例


Posted in PHP onNovember 25, 2017

本文实例讲述了PHP递归实现汉诺塔问题的方法。分享给大家供大家参考,具体如下:

汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。简而言之,有三根相邻的柱子,标号为A,B,C,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, 'A', 'B', 'C');
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 Sql Server连接失败问题及解决办法
Aug 07 PHP
php日期转时间戳,指定日期转换成时间戳
Jul 17 PHP
基于wordpress主题制作的具体实现步骤
May 10 PHP
实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
Aug 20 PHP
PHP高手需要要掌握的知识点
Aug 21 PHP
php转换颜色为其反色的方法
Apr 27 PHP
CodeIgniter记录错误日志的方法全面总结
May 17 PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
Nov 16 PHP
关于php几种字符串连接的效率比较(详解)
Feb 22 PHP
浅谈PHP中如何实现Hook机制
Nov 14 PHP
php实现微信小程序授权登录功能(实现流程)
Nov 13 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
Feb 22 PHP
PHP基于curl post实现发送url及相关中文乱码问题解决方法
Nov 25 #PHP
php图片合成方法(多张图片合成一张)
Nov 25 #PHP
PHP简单实现二维数组的矩阵转置操作示例
Nov 24 #PHP
PHP实现图的邻接矩阵表示及几种简单遍历算法分析
Nov 24 #PHP
PHP+Apache环境中如何隐藏Apache版本
Nov 24 #PHP
实例分析基于PHP微信网页获取用户信息
Nov 24 #PHP
thinkPHP通用控制器实现方法示例
Nov 23 #PHP
You might like
使用Discuz关键词服务器实现PHP中文分词
2014/03/11 PHP
PHP 绘制网站登录首页图片验证码
2016/04/12 PHP
浅谈PHP Cookie处理函数
2016/06/10 PHP
Laravel5中防止XSS跨站攻击的方法
2016/10/10 PHP
JavaScript入门教程(12) js对象化编程
2009/01/31 Javascript
js实现GridView单选效果自动设置交替行、选中行、鼠标移动行背景色
2010/05/27 Javascript
AJAX异步从优酷专辑中采集所有视频及信息(JavaScript代码)
2010/11/20 Javascript
js判断鼠标同时离开两个div的思路及代码
2013/05/31 Javascript
javascript中处理时间戳为日期格式的方法
2014/01/02 Javascript
一个JavaScript获取元素当前高度的实例
2014/10/29 Javascript
jQuery弹出框代码封装DialogHelper
2015/01/30 Javascript
JavaScript计算值然后把值嵌入到html中的实现方法
2016/10/29 Javascript
JavaScrpt中如何使用 cookie 设置查看与删除功能
2017/07/09 Javascript
JavaScript你不知道的一些数组方法
2017/08/18 Javascript
jQuery AJAX 方法success()后台传来的4种数据详解
2018/08/08 jQuery
jQuery实现的点击显示隐藏下拉菜单功能完整示例
2019/05/17 jQuery
基于jQuery的时间戳与日期间的转化
2019/06/21 jQuery
微信小程序获取位置展示地图并标注信息的实例代码
2019/09/01 Javascript
Vue自定义全局弹窗组件操作
2020/08/11 Javascript
Openlayers学习之地图比例尺控件
2020/09/28 Javascript
[22:59]VGJ.S vs VG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
浅谈Python中copy()方法的使用
2015/05/21 Python
python操作redis的方法
2015/07/07 Python
Django的分页器实例(paginator)
2017/12/01 Python
python把数组中的数字每行打印3个并保存在文档中的方法
2018/07/17 Python
OpenCV+face++实现实时人脸识别解锁功能
2019/08/28 Python
Anaconda+VSCode配置tensorflow开发环境的教程详解
2020/03/30 Python
python使用hdfs3模块对hdfs进行操作详解
2020/06/06 Python
Pandas缺失值2种处理方式代码实例
2020/06/13 Python
HTML5 视频播放(video),JavaScript控制视频的实例代码
2018/10/08 HTML / CSS
Saucony澳大利亚官网:美国跑鞋品牌,运动鞋中的劳斯莱斯
2018/05/05 全球购物
世界上最大的乐谱选择:Sheet Music Plus
2020/01/18 全球购物
预备党员自我评价范文
2015/03/04 职场文书
走进毛泽东观后感
2015/06/04 职场文书
房屋所有权证明
2015/06/19 职场文书
如何利用js在两个html窗口间通信
2021/04/27 Javascript