Hanoi塔问题——递归方法求解

假设有三个分别命名为x、y、z的圆柱形塔座,在塔座x上插有n个半径大小各不相同,以小到大由上而下编号为1,2,····,n,如图所示。现在要求将X轴上的n个圆盘移至塔Z上并仍按原来的顺序叠放,圆盘移动时必须遵循以下规则:

1.每次只能移动一个圆盘

2.圆盘可以插在X、Y、Z任意一个塔座上

3.任何时刻都不能将一个较大的圆盘压在较小圆盘之上

如何实现圆盘的移动呢?这就要用到我们强大的递归思想。设一个变量n用来调用任意一个圆盘,当n=1时,只要将一号圆盘从X上移动到Z上即可;当n>1,需要利用Y做中间塔,若能设法将压在n号盘上的n-1个圆盘从X移至Y上,然后再将n号盘移到Z上,最后将Y上的n-1个圆盘移到Z上即可!而整个过程中对那n-1个圆盘进行的两次整体操作都可以分别作为一个完整的Hanoi问题。

由此求解的C函数如下:

void move(char a,int n,char c)

{

//此函数的操作为:将a塔上编号为n的圆盘移至c塔上

//此处省略若干字。。。

}

void Hanoi(int n,char a,char b,char c)

//将塔座a上的n个圆盘搬到c上,b作为中间塔

{

if(n==1)move(x,1,z);

else

{

Hanoi(n-1,x,z,y);

move(x,n,z);

Hanoi(n-1,y,x,z);

}

}

可以看出,整个程序都不需要用到实际用于存放Hanoi塔的存储空间(因为算法与客观存在的数据无关嘛),所以move函数可以写成:printf(“将%i号盘从%c塔移到%c塔”,n,a,c);

java hanoi塔问题_Hanoi塔问题 - 智障的个人空间 - OSCHINA - 中文开源技术交流社区...相关推荐

  1. java 写入环境变量_Java环境变量配置 - import_key的个人空间 - OSCHINA - 中文开源技术交流社区...

    Java 环境变量和路径 在 Solaris 系统上,必须先设置 JAVA_HOME 和 PATH 环境变量,Sun Management Center 3.6 安装向导.设置向导和 Java 控制台 ...

  2. emc存储java打开后报错_连接EMC存储系统 - osc_mk8rqvg4的个人空间 - OSCHINA - 中文开源技术交流社区...

    1.准备一台笔记本电脑,一根网线即可. 2.将网线一头连接笔记本电脑,另一头连接存储.(连接存储的一头应连接到有扳手图标的那一网口上) 3.配置IP地址 IP:128.221.1.254 子网掩码:2 ...

  3. java方法调用机制_Java方法调用机制 - osc_bkdv2it5的个人空间 - OSCHINA - 中文开源技术交流社区...

    最近在编程时,修改方法传入对象的对象引用,并没有将修改反映到调用方法中.奇怪为什么结果没有变化,原因是遗忘了Java对象引用和内存分配机制.本文介绍3个点: ① 该问题举例说明 ② 简要阐述Java内 ...

  4. 简易售货机JAVA sql_自动售货机 - 笨拙的小Q的个人空间 - OSCHINA - 中文开源技术交流社区...

    import java.util.Scanner; /** * 华为机试 自动售货机 * 不知道对错 * @author qxl * */ public class Shop { public sta ...

  5. java记录类加载的个数_java类加载过程 - audience_1的个人空间 - OSCHINA - 中文开源技术交流社区...

    java类加载过程: 在我们代码中,一般就一个new的方法,就能够创建一个java的对象类,但在java虚拟机中 1:首先,我们需要判断该类是否已经在方法区中的常量池中有一个类的符号的引用存在,如果该 ...

  6. java的Teacher类_java类的继承 - osc_tauwfamo的个人空间 - OSCHINA - 中文开源技术交流社区...

    类的继承是类的一个重要概念,通过类的继承子类可以继承父类的属性和方法,提高代码的复用性. eg: //** *创建一个父类Teacher,父类有两个属性name,age,两个方法sleep(),tea ...

  7. java 数组减除值_java数组操作 - osc_hwpd2zko的个人空间 - OSCHINA - 中文开源技术交流社区...

    什么是数组: 程序 = 算法+数据结构 算法:解决问题的步骤,流程(顺序,分支,循环) 数据结构:将数据按照某种特定的结构来保存 数怎么存 设计良好的,合理的数据结构可以导致好的算法 数组:就是一种最 ...

  8. java生成xml文件head,生成XML文件 - Glucose的个人空间 - OSCHINA - 中文开源技术交流社区...

    参照网上这篇博客所写,在此表示感谢 package com.qiux.demo; import java.io.FileOutputStream; import java.io.IOException ...

  9. java连连看项目汇报_java连连看小项目 - osc_x4wlt5vu的个人空间 - OSCHINA - 中文开源技术交流社区...

    /* *本人也是刚入门,希望各位多多指教 *该项目主要代码在于连线 *1.2个连线没有拐弯 *2.2个连线有一个拐弯 *3.2个连线有2个拐弯 *采用递归算法 */ package llk; impo ...

最新文章

  1. 【万级并发】电商库存扣减如何设计?不超卖!
  2. Windows socket c++ TCP UDP 简单客户端 vs2013
  3. ssh客户端_Mobaxterm-不止是一款好用的SSH客户端软件
  4. ttc error oracle,ORA-03137: TTC protocol internal error : [12333]错误一例
  5. @Scheduled
  6. LeetCode22——Generate Parentheses(给定n对括号,然后看有多少正确的括号组合)
  7. ipmitool介绍_ipmitool命令行使用详解
  8. VS Code 虽开源,但其精华部分是专有的?
  9. 清华计算机科学与技术专业收分,2016年清华大学计算机科学与技术专业最低分是多少?...
  10. 88是python语言的整数类型_python基本数据类型练习
  11. 【现代通信原理笔记】6 信源编码
  12. 技术文化和惨淡命运 —— 怀念中国雅虎
  13. ENVI纹理特征提取
  14. Python基础教程--【2022暑假全新总结】
  15. kali linux xfce桌面修改锁屏背景图片
  16. Web前端开发必不可少的10个开源框架
  17. 修改Switch开关按钮的颜色
  18. php小数转百分数,PHP百分号转小数,php 小数转换百分数函数
  19. Chirp信号简单介绍
  20. 大数据随记 —— Hadoop 环境搭建

热门文章

  1. 钉钉轻应用PC免登5步曲
  2. 转:zabbix 2.0.6监控cisco交换机 2950 2960s 3560G
  3. 深度学习实验——蒸馏模型实战(一)
  4. javascript 解 一笔画游戏
  5. 计算机黑屏但是有鼠标,电脑黑屏但是能看到鼠标怎么办
  6. MSC.SIMXPERT.V2016全集成多学科仿真解决方案
  7. c语言最大数最小数平均数,C语言编程 求两个数的平均值方法(三种方法)
  8. 【文字识别】TrOCR: Transformer-based Optical Character Recognition with Pre-trained Models
  9. Ultra Wideband Signals and Systems in Communication Engineering
  10. 机器学习——朴素贝叶斯(Naive Bayes)详解及其python仿真