面向过程解决

<?php
function hanio($n,$x,$y,$z){//把n个盘子,按照要求从x移到z,y是中介
//递归跳出条件
if($n==1){
move($n, $x, $z);
}else{
//这三部是核心
hanio($n-1, $x, $z, $y);
move($n, $x, $z);
hanio($n-1, $y, $x, $z);
}
} function move($n, $x, $y){
$format = '把%d从%s移动到%s';
printf($format,$n,$x,$y);
echo "<br/>";
} hanio(2, 'A', 'B', 'C');
?>

  面向过程写

<?php
class Hanio{
private $n;//规模
private $start;//起始柱子
private $mediator;//中介柱子
private $goal;//目标柱子
private $format = '把%d从%s移动到%s';
public function __construct($n,$start,$mediator,$goal){
$this->n = $n;
$this->start = $start;
$this->mediator = $mediator;
$this->goal = $goal;
} //单个盘移动
private function move($n,$start,$goal){
printf($this->format,$n,$start,$goal);
echo "<br/>";
} public function getResult(){
$this->handle($this->n,$this->start,$this->mediator,$this->goal);
} private function handle($n,$x,$y,$z){
//递归跳出条件
if($n==1){
$this->move($n, $x, $z);
}else{
//这三部是核心
$this->handle($n-1, $x, $z, $y);
$this->move($n, $x, $z);
$this->handle($n-1, $y, $x, $z);
}
} } class Client{
public static function main(){
$hanio = new Hanio(4, 'A', 'B', 'C');
$hanio->getResult();
}
} Client::main();
?>

  

汉诺塔问题php解决的更多相关文章

  1. Python实现:汉诺塔问题

    汉诺塔问题不管在任何编程语言里都是经典问题,是采用递归算法的经典案例,该问题可以抽象如下: 一 .3根圆柱A,B,C,其中A上面串了n个圆盘 二 .这些圆盘从上到下是按从小到大顺序排列的,大的圆盘任何 ...

  2. 编程:递归编程解决汉诺塔问题(用java实现)

    Answer: //Li Cuiyun,October 14,2016. //用递归方法编程解决汉诺塔问题 package tutorial_3_5; import java.util.*; publ ...

  3. 用递归方法解决汉诺塔问题(Recursion Hanoi Tower Python)

    汉诺塔问题源于印度的一个古老传说:梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.梵天命令婆罗门把圆盘按大小顺序重新摆放在另一根柱子上,并且规定小圆盘上不能放 ...

  4. 【学习】Python解决汉诺塔问题

    参考文章:http://www.cnblogs.com/dmego/p/5965835.html   一句话:学程序不是目的,理解就好:写代码也不是必然,省事最好:拿也好,查也好,解决问题就好!   ...

  5. C语言:使用递归解决汉诺塔问题。

    //汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小 ...

  6. 关于C语言解决汉诺塔(hanoi)问题

    C语言解决汉诺塔问题 汉诺塔是典型的递归调用问题: hanoi简介:印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔.不论白天黑夜,总有一个僧侣 ...

  7. C#递归解决汉诺塔问题(Hanoi)

    using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace MyExamp ...

  8. java 解决汉诺塔问题

    //汉诺塔问题//HanYang 2016/10/15 import java.util.Scanner; //输出public class Hanuota { public static void ...

  9. python解决汉诺塔问题

    今天刚刚在博客园安家,不知道写点什么,前两天刚刚学习完python 所以就用python写了一下汉诺塔算法,感觉还行拿出来分享一下 首先看一下描述: from :http://baike.baidu. ...

随机推荐

  1. webbrowser打开新窗口事件+=

    测试可用: private void SaveSnapshot_Click(object sender, EventArgs e) { this.webBrowser1.Navigate(txturl ...

  2. histoty显示时间戳

    设置Linux可以查看历史命令的执行时间     大家都知道Linux平台上,可以通过history命令查看最近所执行过的命令,但history命令默认所显示的只有编号和命令的,只知道命令是最近所执行 ...

  3. 通向全栈之路——(4)nginx反向代理配置

    1.安装nginx:sudo apt-get install nginx2.新建配置文件:cd /etc/nginx/conf.dsudo vi XXX-cn-8080.conf内容如下:upstre ...

  4. C# 使用/配置Log4Net

    1.首先在项目中添加Nuget程序包... 2.然后在NuGet窗体中搜索Log4Net,然后点击安装<安装过程可能会持续几分钟,请耐心等待> 3.在项目中添加一个Config文件,如已有 ...

  5. automapper 自动映射 集成asp.net Core2.1

    学习博文:https://www.cnblogs.com/yan7/p/8085410.html 1.使用nuget 安装 <PackageReference Include="Aut ...

  6. 关于Java中语句符号及格式的理解

    关于Java中语句符号及格式的理解 这篇文章是撰写的第一篇文章,在此作一下博主是一名在读的工科研究生,种种原因,研二开始决定转行从事程序员工作.开始的自学之路并不算非常顺畅,也走了一点弯路,但一直都坚 ...

  7. Java代理(二)

    前面说到了java的静态代理,这次来看看动态代理. 假设有如下接口和实现方法: package proxy; public interface Subject { public void reques ...

  8. Spring-全局异常拦截

    Spring MVC那一篇里提到了异常拦截来做参数校验返回,那里是对特定的 controller 做异常捕捉,但是我们也可以选择全局拦截处理 快速开始 @ResponseBody @Controlle ...

  9. K8S基础概念

    一.核心概念 1.Node Node作为集群中的工作节点,运行真正的应用程序,在Node上Kubernetes管理的最小运行单元是Pod.Node上运行着Kubernetes的Kubelet.kube ...

  10. Linux学习6-Linux常用命令(1)

    1.命令格式:命令 [-选项] [参数]     例如:ls -la /etc     说明: 1)个别命令使用不遵循此格式 2)当有多个选项时,可以写在一起 3)简化选项与完整选项 (-a等于 -- ...