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 相关文章推荐
实用函数5
Nov 08 PHP
PHP获取文件绝对路径的代码(上一级目录)
May 29 PHP
ie与session丢失(新窗口cookie丢失)实测及解决方案
Jul 15 PHP
PHP分页详细讲解(有实例)
Oct 30 PHP
php用header函数实现301跳转代码实例
Nov 25 PHP
php读取目录所有文件信息dir示例
Mar 18 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
Jul 29 PHP
Laravel框架中扩展函数、扩展自定义类的方法
Sep 04 PHP
PHP实现Soap通讯的方法
Nov 03 PHP
PHP生成随机数的方法实例分析
Jan 22 PHP
PHP模拟http请求的方法详解
Nov 09 PHP
PHP策略模式定义与用法示例
Jul 27 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
《PHP编程最快明白》第六讲:Mysql数据库操作
2010/11/01 PHP
php通过会话控制实现身份验证实例
2016/10/18 PHP
js弹出的对话窗口永远保持居中显示
2012/12/15 Javascript
js简易namespace管理器 实例代码
2013/06/21 Javascript
JavaScript自执行闭包的小例子
2013/06/29 Javascript
javascript 循环调用示例介绍
2013/11/20 Javascript
javascript相关事件的几个概念
2015/05/21 Javascript
基于javascript实现简单计算器功能
2016/01/03 Javascript
js html5 css俄罗斯方块游戏再现
2016/10/17 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
2017/04/24 Javascript
jquery平滑滚动到顶部插件使用详解
2017/05/08 jQuery
基于jQuery Easyui实现登陆框界面
2017/07/10 jQuery
layer实现关闭弹出层刷新父界面功能详解
2017/11/15 Javascript
JavaScript满天星导航栏实现方法
2018/03/08 Javascript
Vue 后台管理类项目兼容IE9+的方法示例
2019/02/20 Javascript
用node撸一个监测复联4开售短信提醒的实现代码
2019/04/10 Javascript
[04:55]完美世界副总裁蔡玮:DOTA2的自由、公平与信任
2013/12/18 DOTA
Python 文件和输入输出小结
2013/10/09 Python
python的random模块及加权随机算法的python实现方法
2017/01/04 Python
Python使用selenium实现网页用户名 密码 验证码自动登录功能
2018/05/16 Python
在Mac下使用python实现简单的目录树展示方法
2018/11/01 Python
Softmax函数原理及Python实现过程解析
2020/05/22 Python
Pycharm 解决自动格式化冲突的设置操作
2021/01/15 Python
python多线程爬取西刺代理的示例代码
2021/01/30 Python
解决Firefox下不支持outerHTML问题代码分享
2014/06/04 HTML / CSS
学前教育毕业生自荐信范文
2013/12/24 职场文书
创业计划书怎样才能打动风投
2014/01/01 职场文书
党员干部承诺书
2014/03/25 职场文书
民主生活会发言材料
2014/10/20 职场文书
技术支持岗位职责
2015/02/13 职场文书
英文慰问信
2015/02/14 职场文书
应聘教师自荐信
2015/03/26 职场文书
《我的长生果》教学反思
2016/02/20 职场文书
python基础入门之字典和集合
2021/06/13 Python
spring cloud 配置中心客户端启动遇到的问题
2021/09/25 Java/Android
浅析JavaScript中的变量提升
2022/06/01 Javascript