`
endual
  • 浏览: 3545096 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

递归思想 汉诺塔的问题

 
阅读更多

package endual;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int n = 2; //一共有多少个

		char a = 'A' ; //开始的点
		char b = 'B' ; //中间的点
		char c = 'C' ; //结束的点
		hanNoi(n,a,b,c) ;
	}

	/**
	 * 
	 * 这个问题上有一个简单的解法。假设塔座上a, b, c排成一个三角形,a-->b-->-->a构成
	 * 一顺时针循环。在移动圆盘的过程中,若是奇数次移动,则将最小的圆盘移动到顺时针方向的
	 * 下一个底座上;若是偶数次的话,那么保存最小的圆盘不懂,而在其他两个塔座之间将
	 * 较小的圆盘移动到另个塔上去
	 * 
	 * 
	 * 其中,hanNoi(n,a,b,c)表示将塔座a上自下而上,由大到校叠在一起的n个圆盘依次移动
	 * 规则移动到塔座b上并扔按同样顺序叠放。在一定过程中,以塔座作为辅助塔座,
	 * move表示从a移动到b的方法
	 * 
	 * 
	 */
	private static void hanNoi(int n, char a, char b, char c) {
		
        if (n == 1) {
        	//如果就剩下了,那么只有一种情况了,它要么移动到B,要么移动到C
        	//我们认为移动到C才是目标,因为如果移动到B和移动到C都是可行的
        	move (a, c) ; 
        	return ;
        	
        }
        
        //首先吧n-1个移动到b去
        hanNoi(n-1,a,c,b) ; //将底盘最上面n-1个盘子从a移动到b去
        move(a,c) ;        //将底盘最下面一个从a移动到c中
        hanNoi(n-1,b,a,c) ; //然后将n-1个盘子从b移动到c去,这样就完成了整个操作了
		
	}

	private static void move(char a, char c) {
		
		System.out.println(a + "------------->" + c) ;
		
	}

}
 
分享到:
评论

相关推荐

    c++递归实现汉诺塔问题

    汉诺塔问题是一个经典的计算机科学问题,源自印度的古老传说,它涉及到三个柱子和一堆大小...以上就是关于“C++递归实现汉诺塔问题”的详细解析,它涵盖了递归算法设计的基本概念、实例代码以及相关的计算机科学知识。

    递归解决汉诺塔问题[java/Eclipse]

    汉诺塔问题是一个经典的计算机科学问题,源自印度的古老传说,它涉及到将一叠盘子从一根柱子移动到另一根柱子,遵循特定的规则。在这个问题中,有三根柱子A、B和C,以及一堆大小不等的盘子,初始时所有盘子在柱子A上...

    递归实现:汉诺塔问题

    通过递归方法解决汉诺塔问题是一种简洁而优雅的方式,它不仅易于理解和实现,还能帮助我们深入理解递归的思想。本篇介绍的C++代码实现了一个基本的汉诺塔问题解决方案,对于理解递归算法及其在编程中的应用具有重要...

    用递归实现汉诺塔问题

    汉诺塔问题不仅展示了递归的思想,还让我们理解了如何将大问题分解为小问题,以及如何通过反复应用相同策略解决这些小问题。在编程中,递归经常用于树遍历、图遍历、分治算法等许多其他场景,是计算机科学中不可或缺...

    汉诺塔问题matlab代码

    汉诺塔问题是一种经典的递归算法问题,源自印度的一个古老传说。在数学和计算机科学领域,它是用来教学和理解递归思想的一个经典实例。在MATLAB中实现汉诺塔问题,我们可以利用其强大的编程功能来解决这个问题。 ...

    C语言递归求汉诺塔问题.docx

    解决汉诺塔问题的关键在于递归思想的应用。具体步骤如下: 1. **第一步**:将前n-1个盘子从A柱子借助C柱子移动到B柱子上。 2. **第二步**:将剩下的最大的一个盘子从A柱子直接移动到C柱子。 3. **第三步**:将前n-1...

    递归实现汉诺塔

    递归算法是解决汉诺塔问题的理想方法,因为它能将复杂的问题分解为更简单的子问题。 首先,我们需要理解递归的概念。递归是一种函数或过程调用自身的技术,通常用于解决具有相同结构的子问题。在汉诺塔问题中,我们...

    用递归写的汉诺塔小程序

    在解决汉诺塔问题时,递归非常适用,因为问题可以通过解决规模更小的相同问题来解决。汉诺塔有三个柱子(A、B、C),和若干个不同大小的盘子,游戏的目标是将所有盘子从柱子A移动到柱子C,每次只能移动一个盘子,...

    c++用递归方法求解汉诺塔问题

    在汉诺塔问题中,递归的基本思路是:先将上面的n-1个盘子借助柱子B从A移动到C,然后把最底部的第n个盘子直接从A移动到C,最后再将原来在B上的n-1个盘子借助柱子A从B移动到C。 以下是一个简单的C++代码实现,展示了...

    递归方法求解汉诺塔问题

    ### 递归方法求解汉诺塔问题 #### 概述 汉诺塔问题(Hanoi Tower Problem)是一个经典的递归问题,在计算机科学领域中被广泛用于教学递归算法的概念。该问题通常描述为:有三根柱子及 n 个不同大小的圆盘,这些...

    递归—汉诺塔

    解决汉诺塔问题的关键在于理解递归策略。以下是一个简单的递归算法描述: 1. 将A柱上的n-1个圆盘借助B柱移动到C柱。 2. 将A柱剩下的第n个圆盘直接移动到C柱。 3. 将B柱上的n-1个圆盘借助A柱移动到C柱。 这里的n...

    汉诺塔问题算法以及实现

    汉诺塔问题是一个经典的递归算法案例,它不仅在计算机科学领域有着广泛的应用,同时也被用来教授递归思想的基础知识。这个问题最早由法国数学家Édouard Lucas于1883年提出,并以其发明者的名字命名。汉诺塔问题涉及...

    汉诺塔问题汉诺塔问题

    总的来说,汉诺塔问题是一个典型的递归问题,对于理解递归思想、学习算法设计和提高编程能力具有重要意义。通过解决不同版本的汉诺塔问题,可以锻炼我们的逻辑思维和问题解决能力,对于参加ACM/ICPC等程序设计竞赛的...

    汉诺塔图形解法(递归算法)

    汉诺塔图形解法(递归算法) 汉诺塔图形解法是利用递归算法来解决汉诺...HanNoTa 图形解法是一种使用递归算法来解决汉诺塔问题的经典示例,能够直观地显示汉诺塔的移动过程,帮助用户更好地理解递归算法的思想和实现。

    递归方法解决汉诺塔问题

    递归方法是解决汉诺塔问题的理想策略,因为问题本身的结构就具有递归特性。在汉诺塔问题中,我们可以将大问题分解为更小的相同问题,并递归地解决它们。具体来说,我们首先将上面的n-1个圆盘从起始柱A移动到中间柱B...

    汉诺塔递归算法(动态效果)

    汉诺塔问题是一个经典的计算机科学问题,源自印度的古老传说,它涉及到递归算法的运用。在这个问题中,有三个柱子,分别标记为A、B、C,柱子A上按照大小顺序叠放着若干个盘子。目标是将所有盘子从柱子A移动到柱子C,...

    汉诺塔问题的递归算法,很简单哦

    汉诺塔问题是一个经典的计算机科学问题,源自印度的古老传说,它很好地展示了递归思想在解决问题中的应用。在这个问题中,我们有3个柱子,分别标记为A、B、C,柱子A上叠放着n个大小不一的盘子,遵循“大盘在下,小盘...

    递归算法汉诺塔的实现

    3. **教育价值**:汉诺塔问题有助于理解递归思想,是计算机科学入门教学的经典实例。 总结,汉诺塔问题的递归解决方式是通过分解问题至最基本情况,然后逐步组合出完整解决方案。这种思维方式在编程和许多其他领域...

    用栈实现汉诺塔问题

    任意输入N个盘,在三个柱子上实现汉诺塔问题的非递归求解,用栈进行

Global site tag (gtag.js) - Google Analytics