`
shuofenglxy
  • 浏览: 195328 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

递归总结二 汉诺塔问题

阅读更多

汉诺塔是貌似递归入门的引导题目,把这个过程写下来,mark一下递归。没别的用处。

package hanoi;

public class Hanoi {
	/**
	 * 以A表示起始柱子,C表示结果柱,B表示中间柱
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		int n = 4;
		hanio(n, 'A', 'C', 'B');
	}

	/**
	 * 递归步骤如下: 先将前n-1块盘子挪到中间柱 然后将最后一块盘子挪到结果柱 最后将前n-1块柱子从中间柱挪想结果柱就可以了
	 * 
	 * @param n
	 * @param start
	 * @param destination
	 * @param temp
	 */
	public static void hanio(int n, char start, char destination, char temp) {
		if (n <= 0) {
			System.out.println("输入盘子个数必须大于0");
			return;
		}
		if (n == 1) {
			move(1, start, destination);
		} else {
			hanio(n - 1, start, temp, destination);
			move(n, start, destination);
			hanio(n - 1, temp, destination, start);
		}

	}

	/**
	 * 拼成打印挪盘子过程,纯粹是好玩 呵呵 没别的用处 可能这个第几的英文特例还没考虑全
	 * 
	 * @param current
	 * @param start
	 * @param destination
	 */
	public static void move(int current, char start, char destination) {
		StringBuilder sb = new StringBuilder();
		sb.append("move ").append(current);
		if (current == 1)
			sb.append("st dish from ");
		else if (current == 2)
			sb.append("nd dish from ");
		else if (current == 3)
			sb.append("rd dish from ");
		else
			sb.append("th dish from ");
		sb.append(start).append(" to ").append(destination);
		System.out.println(sb.toString());
	}
}

 说明:大概是这个样子吧,跑了3 跟4 没有问题。没看别的,呵呵。

分享到:
评论

相关推荐

    递归实现:汉诺塔问题

    ### 递归实现:汉诺塔问题 #### 经典问题背景 汉诺塔(Hanoi Tower)问题是一个经典的递归问题,源自一个古老的故事。传说在印度的一个神殿里,有三根金刚石柱子,第一根柱子上自上而下按大小顺序叠着64个金盘。...

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

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

    函数递归调用-汉诺塔问题_c++实现汉诺塔问题_

    解决汉诺塔问题的关键在于递归策略,即通过将问题分解为更小的子问题来解决。在C++中,我们可以定义一个递归函数来实现这个过程。首先,我们需要理解递归的基本概念:递归是一个函数调用自身的过程,通常用于处理...

    递归方法求解汉诺塔问题

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

    用递归写的汉诺塔小程序

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

    C#汉诺塔非递归

    在C#中,解决汉诺塔问题通常采用递归方法,但本话题探讨的是如何使用非递归算法,通过栈数据结构来解决。 非递归解决方案的核心在于模拟汉诺塔的移动过程,这通常涉及到两个辅助柱子和一个目标柱子。在C#中,我们...

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

    总之,汉诺塔问题的解决揭示了递归算法在解决分治策略问题中的威力,同时也为我们提供了一个理解递归概念和实践的实例。通过学习这个经典问题,我们可以更好地掌握递归的思想,并将其应用到其他领域,如数据结构、...

    递归方法解决汉诺塔问题

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

    C++递归函数(汉诺塔)代码

    汉诺塔游戏是一种经典的逻辑问题,它展示了递归思想在解决复杂问题时的强大能力。在这个游戏中,有三根柱子和一堆盘子,盘子大小不一,且较大的盘子不能放在较小的盘子上面。游戏的目标是将所有盘子从第一根柱子(源...

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

    总的来说,汉诺塔问题的解决方案结合了递归算法和Java Swing的图形化能力,提供了一种直观的方式来理解和演示这一经典问题。在Eclipse中实现这样的程序,可以帮助学习者深入理解递归思想,并掌握如何在实际项目中...

    递归法解汉诺塔问题之源代码

    一般的汉诺塔源代码,使用递归的算法,最大能解7个汉诺塔问题。

    汉诺塔问题算法以及实现

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

    C++递归算法(汉诺塔问题)

    C++递归算法(汉诺塔问题)

    汉诺塔非递归算法实验报告

    汉诺塔问题是一个经典的计算机科学问题,通常使用递归算法来解决。然而,这个实验报告提出了使用非递归算法来解决汉诺塔问题的方法。非递归算法的关键在于找到一个可重复执行的步骤序列,而不是像递归那样通过自我...

    2-2 递归算法之汉诺塔问题.pptx

    递归算法的汉诺塔问题实现ppt,较详细得解释了递归算法的使用以及如何用递归算法来解决汉诺塔问题,QAQ

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

    汉诺塔图形解法是利用递归算法来解决汉诺塔问题的一个经典示例。汉诺塔问题是指将一个由多个不同的圆盘组成的柱子从一个柱子移至另一个柱子,而圆盘的大小各不相同,且大的圆盘不能放在小的圆盘上面。汉诺塔图形解法...

    C++基于递归算法解决汉诺塔问题与树的遍历功能示例

    本文实例讲述了C++基于递归算法解决汉诺塔问题与树的遍历功能。分享给大家供大家参考,具体如下: 递归是把问题转化为规模缩小的同类问题,然后迭代调用函数(或过程)求得问题的解。递归函数就是直接或间接调用自身...

    使用java递归实现汉诺塔(Hanio)

    汉诺塔(Hanoi)问题是一个经典的递归算法问题,起源于19世纪法国数学家爱德华·卢卡斯提出的一个智力游戏。这个游戏中有三个柱子和一堆大小不一的圆盘,所有圆盘起初都堆在第一个柱子上,按照由大到小的顺序...

    汉诺塔的非递归实现,c++

    总之,非递归的汉诺塔问题C++实现是一种创新的解决方案,它利用数据结构来避免递归调用的开销,展示了算法设计的灵活性和创造性。通过学习这种实现,你可以更深入地理解数据结构、算法以及它们在实际编程中的应用。

    汉诺塔问题的非递归算法

    对于解决汉诺塔问题,传统方法是通过递归算法实现,即通过不断将问题规模缩小,直到简化到最基本的情况,然后逐步返回并解决每一层的子问题。然而,递归算法在处理大量圆盘时容易引起调用栈过深,导致效率低下。因此...

Global site tag (gtag.js) - Google Analytics