php递归算法经典实例_汉诺塔问题递归算法c语言

php递归算法经典实例_汉诺塔问题递归算法c语言利用PHP实现汉诺塔汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。简而言之,有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

利用PHP实现 汉诺塔

汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。简而言之,有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方,请问至少需要多少次移动?


逻辑分析以及代码实现

<?php // 汉诺塔算法 // 实现逻辑 --> 递归 (关系可以由 n=2 比较容易想出) // 把 第 n-1 个由 A 移动到C // 把 第 n 个 由 A 移动到 B // 把 第 n-1 个由 C移动到 B function hanuota($n, $a, $b, $c) { 
     global $step; if ($n == 1) { $step++; echo " 把第 " . $n . " 个由" . $a . " 移动到 ". $b. "<br />"; } else { // 把n-1 由 A 移动到 C hanuota($n-1, $a, $c, $b); $step++; echo " 把第 " . $n . " 个由" . $a . " 移动到 ". $b. "<br />"; // 把n-1 由C 移动到 B 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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169573.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • make wildcard_其在古文中的用法

    make wildcard_其在古文中的用法
    在Makefile规则中,通配符会被自动展开。但在变量的定义和函数引用时,通配符将失效。这种情况下如果需要通配符有效,就需要使用函数“wildcard”,它的用法是:$(wildcardPATTERN…)。在Makefile中,它被展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表。如果不存在任何符合此模式的文件,函数会忽略模式字符并返回空。需要注意的是:这种情况下规则中通配符的展开和上一小节匹配通配符的区别。
    一般我们可以使用“$(wildcard*.c)”来获取工作

    2022年10月21日
    0
  • Java下拼接运行动态SQL语句

    Java下拼接运行动态SQL语句

    2022年2月4日
    66
  • c语言基础—-字符串数组

    c语言基础—-字符串数组字符串在C语言中,字符串实际上是使用 null 字符'\0'终止的一维字符数组。因此,一个以null结尾的字符串,包含了组成字符串的字符。字符定义输

    2022年7月1日
    19
  • vue中通过路由跳转的三种方式

    vue中通过路由跳转的三种方式router-view实现路由内容的地方,引入组件时写到需要引入的地方需要注意的是,使用vue-router控制路由则必须router-view作为容器。通过路由跳转的三种方式1、router-link【实现跳转最简单的方法】&amp;amp;lt;router-linkto=’需要跳转到的页面的路径&amp;amp;gt;浏览器在解析时,将它解析成一个类似于&amp;amp;lt;a&amp;amp;gt;的

    2022年7月27日
    3
  • VMware虚拟机安装ubuntu16.04系统教程[通俗易懂]

    对于没有接触过Ubuntu系统的小伙伴来说,直接在物理机上安装Ubuntu单系统或者windows、Ubuntu双系统一件比较刺激的事情,因为一不小心可能就会把电脑整崩溃,或者出现各种问题,所以在一开始可以用虚拟机熟悉演练一下Ubuntu系统很有必要,今天把这个过程分享一下,希望朋友们能够一次性地顺利安装好,愉快地进行体验玩耍,话不多说,教程奉上。由于本台电脑是2010的机器了…

    2022年4月7日
    52
  • Degenerate_generate动词

    Degenerate_generate动词22. Generate Parentheses C++回溯法

    2022年4月20日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号