IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> java详解汉诺塔的递归原理和机制图 So Easy -> 正文阅读

[游戏开发]java详解汉诺塔的递归原理和机制图 So Easy

java详解汉诺塔的递归原理和机制图 So Easy

哈哈哈,汉诺塔怎么玩都晓得了吧!一共三个柱子就是将第一个柱子的盘子(自定义盘子数)都放在第三个柱子上,大盘在下,小盘在上。有兴趣的小伙伴可以去尝试一下64个盘子的!要是能做出来,那么恭喜你,你的寿命比太阳系都要高的多的多!!!
你刚刚是不是会心一笑,那么现在可以开始专注的学习了!(笔者开始学习时都会让自己处于一个开心的状态,这样有助于高效学习——>可以去看看短小的搞笑视频)

首先我们来看一下这段代码

public class Hanoi02{
	public static void main(String[] args) {
	    //3.创建一个对象,有的地方也叫实例化一个对象
	    // 类名  自己起一个名 = new 类名();  
		Hannuota hanoi = new Hannuota();
		//4.对类为Hannuota的hannuota成员方法进行调用
		hanoi.hannuota(3,'A','B','C');  
		//三个柱子char类型保存  A B C
	}
}
//  1.这是第一步哦!先创建一个Hannuota类,这里的标志符命名不是很规范昂!
class Hannuota{
    // 2.创建一个hannuota的成员方法
    // 修饰符 返回值类型 方法名 ()参数列表 { }方法体
    // 这里我们用void返回值类型,可以不写return
	public void hannuota(int n,char A,char B,char C){
	    //  n 代表盘数  三个柱子我们用char类型保存  A B C
		//开始方法体的代码编写,这里的代码不了解没有关系,先有个印象看下面
		if (n == 1) {
			System.out.println(A + "->" + C);
		}else{
			hannuota(n-1,A,C,B);
			System.out.println(A + "->" + C);
			hannuota(n-1,B,A,C);
 	
		}
	}
}

运行结果
在这里插入图片描述
大家在7K7K上找到相关的汉诺塔游戏玩一下,拿盘数为三的根据上面的代码结果玩一下,验证一下代码的正确性。
不要光看,一定要去玩一下,有助于理解。你可以自己先玩一遍,然后根据代码输出结果跟着走一遍。会有对下面的知识理解有很大的帮助。

接下来我告诉一下大家汉诺塔的原理,慢慢引导大家
我们的目的是要将所有的盘,按大的在下,小的在上放到第三盘上的。在这里插入图片描述
我们要完成这个目标,那么
1.将第一个柱子A上的最后一个盘(第n个)要先放在第三个柱子上C
2.也就是要将A上的n-1这些盘子先放在B柱上
3.然后将A柱的最后一个放到C上
依次类推完成汉诺塔的操作
即,将A柱上只剩下第n个盘,将***其余n-1盘***放到B柱上,然后将第n个盘放在C柱子上,然后将剩下的n-1个盘看成整体n,重复调用本句话,知道所有盘都放到了C柱上。

这个就是大致的一个思路

接下来我们慢慢这个思路引入到编程思想中去
在这里插入图片描述
盘数为三时,上面是我们的操作步骤,大家再根据上面步骤,再玩一次,然后玩下看

在这里插入图片描述

其实就是往复的利用“n-1”,进行反复递归的操作,完成了最大的盘放到C柱上的操作后,只需要将n-1里的最后一个次大的盘单独放在一个柱子上,剩下的n-1放到另一个柱子上,这里动脑筋!!!,这时就要借助其他的柱子,来完成。
上面的代码我们在类的成员方法的参数列表中定义了方法的参数的个数和类型。三个char类型代表A B C三个柱子。n表示盘数
盘移动到柱子上的操作其实就相当于变量和变量的相互赋值

 int a = 10;
     int b;
     b = a;

也就是代码的这个部分
在这里插入图片描述

只不过这里是char类型的参数,这里对不了解递归操作机制的同学可能会一脸懵,没有关系,下面就来给大家解懵
我们在main函数中创建好hanoi对象(实例化对象)以后,去调用Hannuota类中的成员方法。
在这里插入图片描述

class Hannuota{
	//该方法体只是对步骤的说明所以没有返回值 用 void
	public void hannuota(int n,char A,char B,char C){
	    //  n 代表盘数  三个柱子我们用char类型保存  A B C
	    //int n = 4
	    //char A = 'A';
	    //char B = 'B';
	    //char C = 'C';
		if (n == 1) {
			System.out.println(A + "->" + C);
			//当A柱或者B柱只剩下最大或者次大的盘直接放到C
		}else{
			//这里的代码看不懂没有关系,继续往下看
			hannuota(n-1,A,C,B);
			System.out.println(A + "->" + C);
			hannuota(n-1,B,A,C);
		}
	}
}

这个语句System.out.println(A + “->” + C);我们的递归操作就是要将输出的char参数进行赋值,这样来达到移动盘到柱子(借助其他的柱子)。知道了这些,我们来画画这里代码的运行机制图。
这里先给出我手画出来的,字难看了点(捂脸),大家可以截一下图,翻转一下来看。一会我会一步步去解释
在这里插入图片描述
下面具体说一下代码的调用机制图,和返回输出值的步骤

在这里插入图片描述

class Hannuota{
	//该方法体只是对步骤的说明,所以没有返回值 用 void
	public void hannuota(int n,char A,char B,char C){
	    //  n 代表盘数  三个柱子我们用char类型保存  A B C
	    //int n = 4
	    //char a = 'A';
	    //char b = 'B';
	    //char c = 'C';
		if (n == 1) {
			System.out.println(A + "->" + C);
			//当A柱或者B柱只剩下最大或者次大的盘直接放到C
		}else{
			//这里的代码看不懂没有关系,继续往下看
			hannuota(n-1,A,C,B);
			System.out.println(A + "->" + C);
			hannuota(n-1,B,A,C);
		}
	}
}

在main函数调用我们的方法时,这个方法就会在栈中创建一个独立的空间,每个栈空间又会调用该方法,调用几次产生几个独立的空间。 如下图所示。
在这里插入图片描述
调用顺序:
在这里插入图片描述
输出顺序在图上进行了标注。
对变量进行赋值的步骤在我手画的那张图上,如果对赋值这块容易懵的,大家可以看看。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-03-24 00:54:10  更:2022-03-24 00:56:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:15:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码