汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

汉诺塔问题在数学界有很高的研究价值,而且至今还在被一些数学家们所研究。也是我们所喜欢玩的一种益智游戏,它可以帮助开发智力,激发我们的思维。

下面我们用代码的形式解决汉诺塔的问题:

假设盘子个数为N, N≥1,三根柱子分别为a柱,b柱,c柱.
那么移动盘子的步骤如下:
如果n == 1的时候,直接把盘子从a柱移到c柱即可.
1.把第n-1个盘子借助c柱,从a柱移动到b柱;
2.把第n个盘子从a柱移动到c柱;
3.把第n-1个盘子从b柱借助a柱移动到c柱.

具体代码如下:

package com.tracy.algorithm;public class Hanoi {public static void main(String[] args) {int n = 3;move(n, 'a', 'b', 'c');}public static void move(int n, char a, char b, char c) {if (n == 1) {System.out.println("盘" + n + "从" + a + "柱子移动到" + c + "柱子");} else {// 1.move(n - 1, a, c, b);// 2.System.out.println("盘" + n + "从" + a + "柱子移动到" + c + "柱子");// 3.move(n - 1, b, a, c);}}
}

当盘子数n == 3时,控制台打印结果如下:

当盘子数n == 4时,控制台打印结果如下:

运行结果与实际相符.

这里可以看到,当盘子数量比较大的时候,几行代码就可以解决原本很复杂的数学问题,这就是”递归”的魅力.

简单算法解决汉诺塔问题相关推荐

  1. 用python递归的算法解决汉诺塔问题

    关于递归的四条基准法则 基准情形: 必须由某些基准情形,它无需递归就能解出 不断推进: 对于那些需要递归的情形,每一次递归调用都必须要使求解的状况朝接近基准情形的方向推进 设计法则: 假设所有的递归调 ...

  2. 2.2基本算法之递归和自调用函数_用栈算法递归解决汉诺塔问题

    今天博主收一下线性表的尾,最近我们要学习的内容是栈和队列板块,栈和队列板块分为两讲,第一讲也就是今天我们主要学习栈的相关知识,包括栈的定义.栈的顺序表示及实现,栈的链式表示,栈的应用举例,以及栈递归实 ...

  3. 【Java数据结构与算法】第十七章 二分查找(非递归)和分治算法(汉诺塔)

    第十七章 二分查找(非递归)和分治算法(汉诺塔) 文章目录 第十七章 二分查找(非递归)和分治算法(汉诺塔) 一.二分查找 1.思路 2.代码实现 二.分治算法(汉诺塔) 1.概述 2.汉诺塔 一.二 ...

  4. c语言递归汉诺塔次数,c语言递归解决汉诺塔参数变化的疑惑

    c语言递归解决汉诺塔参数变化的疑惑 答案:3  信息版本:手机版 解决时间 2020-04-05 14:20 已解决 2020-04-05 10:49 #include void main() {vo ...

  5. 数据结构之递归算法解决汉诺塔问题

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

  6. 用函数递归的方法解决汉诺塔问题

    函数递归算法的运用有一个经典例题,那就是汉诺塔问题,接下来就让我们一起来看看如何用函数递归来解决汉诺塔问题叭! 汉诺塔问题的起源: 汉诺塔(又称河内塔)问题是印度的一个古老的传说.开天辟地的神勃拉玛在 ...

  7. 经典算法之汉诺塔求解问题

    法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64 ...

  8. 用 python 解决汉诺塔问题并附带演示过程

    用 python 解决汉诺塔问题并附带演示过程 参考文章: (1)用 python 解决汉诺塔问题并附带演示过程 (2)https://www.cnblogs.com/shinawear/p/1061 ...

  9. c语言递归解决汉诺塔问题

    c语言递归解决汉诺塔问题 参考文章: (1)c语言递归解决汉诺塔问题 (2)https://www.cnblogs.com/didiaoxiaoguai/p/6686407.html 备忘一下.

最新文章

  1. 电脑右键没有新建按钮解决办法
  2. 简化 MongoDB 关联运算
  3. [转]thinkphp 模板显示display和assign的用法
  4. 网络中最常用的网络命令(2)-完整参数
  5. pdo mysql like_PHP PDO准备的语句-MySQL LIKE查询
  6. JfreeChart(八)之甘特图
  7. poj_2299Ultra-QuickSort,树状数组离散化
  8. bzoj3173: [Tjoi2013]最长上升子序列(fhqtreap)
  9. 用C语言显示所有Ascll表
  10. java 记牌_JAVA入门之简易扑克牌游戏
  11. linux log4cxx 静态库,log4cxx的个人实践
  12. Python中的多线程是假的多线程
  13. 虚化背景(深度映射篇)
  14. 起始2021-01-15
  15. PAMI19 - 强大的级联RCNN架构《Cascade R-CNN: High Quality Object Detection and Instance Segmentation》
  16. CSS设置图像的透明度
  17. c语言冗余数据什么意思,冗余是什么意思_冗余解释和意思
  18. 再度联手中国联通,开启第二个五年战略合作!
  19. 什么是可变参数列表?以及可变参数列表是如何实现的?
  20. 彻底禁止Microsoft Security Client OOBE 程序错误解决办法 (关闭Windows Defender)

热门文章

  1. Adobe Photoshop CC 2019删除的水印或者文字的方法
  2. 循序渐进的手动安装k8s笔记-3
  3. 15种可切换404自适应页面源码
  4. 质量流量计读数不准的其中三点原因
  5. 7-32 寻找250 (10分)
  6. 从柏拉图采花问题说起
  7. 多种方法清理电脑内存,解决电脑卡问题
  8. 莫非是水产品?CASS10.1.6本可以支持CAD2010-2020不同的平台
  9. 惩罚因子(penalty term)与损失函数(loss function)
  10. 中国香港地铁站经纬度(百度坐标系)