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 相关文章推荐
WHOIS类的修改版
Oct 09 PHP
PHP操作mysql函数详解,mysql和php交互函数
May 19 PHP
php中如何同时使用session和cookie来保存用户登录信息
Jul 05 PHP
使用php计算排列组合的方法
Nov 13 PHP
codeigniter数据库操作函数汇总
Jun 12 PHP
完美的2个php检测字符串是否是utf-8编码函数分享
Jul 28 PHP
php简单操作mysql数据库的类
Apr 16 PHP
php获取图片信息的方法详解
Dec 10 PHP
php仿微信红包分配算法的实现方法
May 13 PHP
php flush无效,IIS7下php实时输出的方法
Aug 25 PHP
PHP实现的XXTEA加密解密算法示例
Aug 28 PHP
laravel 根据不同组织加载不同视图的实现
Oct 14 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
MySQL数据源表结构图示
2008/06/05 PHP
PHP中uploaded_files函数使用方法详解
2011/03/09 PHP
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
2011/05/29 PHP
XAMPP安装与使用方法详细解析
2013/11/27 PHP
PHP对象克隆clone用法示例
2016/09/28 PHP
PHP 加密 Password Hashing API基础知识点
2020/03/02 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 1)
2007/03/10 Javascript
从jQuery.camelCase()学习string.replace() 函数学习
2011/09/13 Javascript
JS中toFixed()方法引起的问题如何解决
2012/11/20 Javascript
JavaScript编程的10个实用小技巧
2014/04/18 Javascript
jscript读写二进制文件的方法
2015/04/22 Javascript
jQuery实现带滚动导航效果的全屏滚动相册实例
2015/06/19 Javascript
javascript函数自动执行常用方法汇总
2016/03/28 Javascript
基于JS实现类似支付宝支付密码输入框
2016/09/02 Javascript
AngularJS入门教程一:路由用法初探
2017/05/27 Javascript
JavaScript实现计算圆周率到小数点后100位的方法示例
2018/05/08 Javascript
koa-router源码学习小结
2018/09/07 Javascript
jQuery实现动态加载(按需加载)javascript文件的方法分析
2019/05/31 jQuery
jquery-ui 进度条功能示例【测试可用】
2019/07/25 jQuery
vue源码nextTick使用及原理解析
2019/08/13 Javascript
python进阶教程之循环相关函数range、enumerate、zip
2014/08/30 Python
python下MySQLdb用法实例分析
2015/06/08 Python
python 对txt中每行内容进行批量替换的方法
2018/07/11 Python
对python操作kafka写入json数据的简单demo分享
2018/12/27 Python
pycharm打开命令行或Terminal的方法
2019/01/16 Python
Python shutil模块用法实例分析
2019/10/02 Python
Python代码覆盖率统计工具coverage.py用法详解
2020/11/25 Python
全面解析HTML5中的标准属性与自定义属性
2016/02/18 HTML / CSS
阿迪达斯新加坡官方网站:adidas新加坡
2019/12/06 全球购物
英国儿童设计师服装和玩具购物网站:Zac & Lulu
2020/10/19 全球购物
历史学专业毕业生求职信
2013/09/27 职场文书
学习朴航瑛老师爱岗敬业先进事迹思想汇报
2014/09/17 职场文书
党的群众路线学习笔记
2014/11/06 职场文书
少年犯观后感
2015/06/11 职场文书
中秋晚会致辞
2015/07/31 职场文书
Spring Boot 排除某个类加载注入IOC的操作
2021/08/02 Java/Android