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 4.2书写安全的脚本
Oct 09 PHP
php入门小知识
Mar 24 PHP
PHP+MYSQL 出现乱码的解决方法
Aug 08 PHP
PHP CKEditor 上传图片实现代码
Nov 06 PHP
php的list()的一步操作给一组变量进行赋值的使用
May 18 PHP
允许phpmyadmin空密码登录的配置方法
May 29 PHP
调整优化您的LAMP应用程序的5种简单方法
Jun 26 PHP
php 函数中使用static的说明
Jun 01 PHP
使用php实现截取指定长度
Aug 06 PHP
PHP里8个鲜为人知的安全函数分析
Dec 09 PHP
phpmailer简单发送邮件的方法(附phpmailer源码下载)
Jun 13 PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
Apr 26 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
Amazon Prime Video平台《无限住人 -IMMORTAL-》2020年开始TV放送!
2020/03/06 日漫
php中邮箱地址正则表达式实现与详解
2012/04/24 PHP
PHP自带ZIP压缩、解压缩类ZipArchiv使用指南
2015/03/03 PHP
php+lottery.js实现九宫格抽奖功能
2019/07/21 PHP
PHP7修改的函数
2021/03/09 PHP
JavaScript国旗变换效果代码
2008/08/13 Javascript
兼容ie和firefox js关闭代码
2008/12/11 Javascript
JavaScript编程中容易出BUG的几点小知识
2015/01/31 Javascript
js实现九宫格图片半透明渐显特效的方法
2015/02/16 Javascript
jQuery插件pagewalkthrough实现引导页效果
2015/07/05 Javascript
javascript新闻跑马灯实例代码
2020/07/29 Javascript
AngularJS入门教程之XHR和依赖注入详解
2016/08/18 Javascript
Javascript 实现简单计算器实例代码
2016/10/23 Javascript
获取select的value、text值的简单示例(jquery与javascript)
2016/12/07 Javascript
基于构造函数的五种继承方法小结
2017/07/27 Javascript
解决Jquery下拉框数据动态获取的问题
2018/01/25 jQuery
AngularJS双向数据绑定原理之$watch、$apply和$digest的应用
2018/01/30 Javascript
用vue写一个仿简书的轮播图的示例代码
2018/03/13 Javascript
Angular5集成eventbus的示例代码
2018/07/19 Javascript
js实现随机8位验证码
2020/07/24 Javascript
JavaScript Blob对象原理及用法详解
2020/10/14 Javascript
[48:48]完美世界DOTA2联赛PWL S3 Magama vs GXR 第一场 12.19
2020/12/24 DOTA
分享Python开发中要注意的十个小贴士
2016/08/30 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
2017/11/23 Python
解决Python 使用h5py加载文件,看不到keys()的问题
2019/02/08 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
2019/06/18 Python
Python异常模块traceback用法实例分析
2019/10/22 Python
html5响应式开发自动计算fontSize的方法
2020/01/13 HTML / CSS
全球最大的中文旅行网站:去哪儿网
2017/11/16 全球购物
上班上网检讨书
2014/01/29 职场文书
小学语文教学反思
2014/02/10 职场文书
2014年调度员工作总结
2014/11/19 职场文书
2015年春训学习心得体会范文
2015/03/09 职场文书
施工单位工程部经理岗位职责
2015/04/09 职场文书
java泛型通配符详解
2021/07/25 Java/Android
opencv用VS2013调试时用Image Watch插件查看图片
2021/07/26 Python