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自动跳转中英文页面
Jul 29 PHP
使用php来实现网络服务
Sep 15 PHP
php UTF-8、Unicode和BOM问题
May 18 PHP
基于PHP CURL用法的深入分析
Jun 09 PHP
php数组转换js数组操作及json_encode的用法详解
Oct 26 PHP
Smarty中的注释和截断功能介绍
Apr 09 PHP
php常用图片处理类
Mar 16 PHP
Yii框架上传图片用法总结
Mar 28 PHP
yii2局部关闭(开启)csrf的验证的实例代码
Jul 10 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
Oct 18 PHP
PHP使用mysqli同时执行多条sql查询语句的实例
Mar 22 PHP
Laravel中GraphQL接口请求频率实战记录
Sep 01 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
中国收音机工业发展史
2021/03/02 无线电
手冲咖啡应该是现代精品咖啡店的必备选项吗?
2021/03/03 冲泡冲煮
生成静态页面的PHP类
2006/11/25 PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
2013/06/26 PHP
PHP数组排序函数合集 以及它们之间的联系分析
2013/06/27 PHP
php遍历文件夹和文件列表示例分享
2014/03/11 PHP
php获取一个变量的名字的方法
2014/09/05 PHP
php判断文件上传类型及过滤不安全数据的方法
2014/12/17 PHP
php校验表单检测字段是否为空的方法
2015/03/20 PHP
php实现对象克隆的方法
2015/06/20 PHP
PHP的命令行命令使用指南
2015/08/18 PHP
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
PHP开发之用微信远程遥控服务器
2018/01/25 PHP
一些常用的JS功能函数代码
2009/06/23 Javascript
JS字符串处理实例代码
2013/08/05 Javascript
js动态设置鼠标事件示例代码
2013/10/30 Javascript
探讨js中的双感叹号判断
2013/11/11 Javascript
JavaScript之IE的fireEvent方法详细解析
2013/11/20 Javascript
基于jQuery的图片不完全按比例自动缩小
2014/07/11 Javascript
基于jquery实现日历签到功能
2020/09/11 Javascript
Vue2.x中的父子组件相互通信的实现方法
2017/05/02 Javascript
详解js中let与var声明变量的区别
2020/04/05 Javascript
微信小程序调用wx.getImageInfo遇到的坑解决
2020/05/31 Javascript
[03:35]2018年度DOTA2最佳辅助位选手5号位-完美盛典
2018/12/17 DOTA
python从入门到精通(DAY 1)
2015/12/20 Python
python 字典中文key处理,读取,比较方法
2018/07/06 Python
numpy.where() 用法详解
2019/05/27 Python
tensorflow 环境变量设置方式
2020/02/06 Python
Python Celery异步任务队列使用方法解析
2020/08/10 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
2021/03/03 Python
CSS3——齿轮转动关键代码
2013/05/02 HTML / CSS
使用canvas对多图片拼合并导出图片的方法
2018/08/28 HTML / CSS
屈臣氏官方旗舰店:亚洲享负盛名的保健及美妆零售商
2019/03/15 全球购物
个人作风建设心得体会
2014/10/22 职场文书
2016道德模范先进事迹材料
2016/02/26 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python