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+DBM的同学录程序(1)
Oct 09 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
Jun 28 PHP
Yii使用find findAll查找出指定字段的实现方法
Sep 05 PHP
php返回json数据函数实例
Oct 09 PHP
初识laravel5
Mar 02 PHP
php+ajax无刷新分页实例详解
Dec 07 PHP
PHP的Json中文处理解决方案
Sep 29 PHP
Python中使用django form表单验证的方法
Jan 16 PHP
yii2学习教程之5种内置行为类详解
Aug 03 PHP
php格式文件打开的四种方法
Feb 24 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
Jun 22 PHP
Thinkphp 框架扩展之应用模式实现方法分析
Apr 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 insert语法详解
2008/06/07 PHP
PHP+JS+rsa数据加密传输实现代码
2011/03/23 PHP
php简单实现文件或图片强制下载的方法
2016/12/06 PHP
PHP反射基础知识回顾
2020/09/10 PHP
WEB 浏览器兼容 推荐收藏
2010/05/14 Javascript
js实现网站首页图片滚动显示
2013/02/04 Javascript
用JavaScript计算在UTF-8下存储字符串占用字节数
2013/08/08 Javascript
jqgrid 表格数据导出实例
2013/11/21 Javascript
jQuery实现文件上传进度条特效
2015/08/12 Javascript
深入理解事件冒泡(Bubble)和事件捕捉(capture)
2016/05/28 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
JS三目运算(三元运算)方法详解
2017/03/01 Javascript
vue组件如何被其他项目引用
2017/04/13 Javascript
mpvue小程序仿qq左滑置顶删除组件
2018/08/03 Javascript
js+html5 canvas实现ps钢笔抠图
2019/04/28 Javascript
浅谈redux, koa, express 中间件实现对比解析
2019/05/23 Javascript
JS实现横向跑马灯效果代码
2020/04/20 Javascript
[47:22]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python生成词云的实现方法(推荐)
2017/06/13 Python
弄懂这56个Python使用技巧(轻松掌握Python高效开发)
2019/09/18 Python
简单了解django处理跨域请求最佳解决方案
2020/03/25 Python
Python如何读取、写入CSV数据
2020/07/28 Python
微信html5页面调用第三方位置导航的示例
2018/03/14 HTML / CSS
日本7net购物网:书籍、漫画、杂志、DVD、游戏邮购
2017/02/17 全球购物
FOREO斐珞尔官方旗舰店:LUNA露娜洁面仪
2018/03/11 全球购物
美国精品地毯网站:Boutique Rugs
2020/03/04 全球购物
.NET程序员的数据库面试题
2012/10/10 面试题
什么是跨站脚本攻击
2014/12/11 面试题
自荐信怎么写呢?
2013/12/09 职场文书
大学生饮食连锁店创业计划书
2014/01/17 职场文书
考试没考好检讨书
2014/01/31 职场文书
大二学习计划书范文
2014/04/27 职场文书
土建工程师岗位职责
2014/06/10 职场文书
大学生学雷锋活动总结
2014/06/26 职场文书
店面出租协议书范本
2014/11/28 职场文书
Nginx代理同域名前后端分离项目的完整步骤
2021/03/31 Servers