`
shenyu
  • 浏览: 122579 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

递归-汉诺塔

阅读更多

汉诺塔问题。

这里顺便可以求出一共需要搬运的次数。

以下是汉诺塔问题的解法:

class Hanoi {
	public static void main(String[] args) {
		int times = hanoi(3,'a','b','c');
		System.out.println("一共搬运" + times + "次");
	}

	//from: 搬运的起点, to:搬运的目标地,middle: 临时中转地
	private static int hanoi(int level, char from, char to, char middle) {
		if(level == 1) {	//递归结束条件,只有一个塔
			System.out.println(level + ": " + from + " to " + to);
			return 1;
		}
		int times = hanoi(level - 1, from, middle, to); //将n-1层搬运的临时中转地
		System.out.println(level + ": " + from + " to " + to);	//将第n层搬运到目标地
		return times + 1 + hanoi(level - 1, middle, to, from);	//将n-1层从临时中转地搬运到目标地
	}
}
 
4
3
分享到:
评论

相关推荐

    递归-汉诺塔

    简单的递归实现汉诺塔程序,是经典的递归应用程序~

    非递归-汉诺塔

    简单的非递归汉诺塔实现,C++初学者交流用。使用的经典的两部算法。

    递归-汉诺塔问题_汉诺塔问题_pure6ce_

    汉诺塔问题:该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个...

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

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

    汉诺塔-汉诺塔的非递归实现源码和原理讲解

    总之,非递归汉诺塔问题的解决方法利用了栈的数据结构,通过迭代实现盘子的有序移动,从而避免了递归可能导致的堆栈溢出问题,尤其适用于处理大规模问题。理解和实现这个算法有助于深化对数据结构和算法的理解,以及...

    java实现界面-汉诺塔

    汉诺塔是一个经典的递归问题,它源自印度的古老传说,涉及将一组圆盘从一根柱子移动到另一根柱子,遵循以下规则: 1. 每次只能移动一个圆盘。 2. 任何时候大盘子都不能位于小盘子之上。 在Java中实现汉诺塔的界面...

    labview小游戏-汉诺塔

    两种移动方法(鼠标、键盘),附带演示功能,有背景音乐 ...或者利用键盘上的上下左右光标键控制木块移动:先按“左”、“右”键移动光标到某柱子下,按“上”键,柱子顶上的木块弹起,再左右移动光标,按“下”键木块...

    商业编程-源码-汉诺塔的动画TC2.0.zip

    `hanoi_tower`函数接收三个参数,表示起始柱、目标柱和辅助柱,通过递归调用来解决汉诺塔问题。 2. **递归逻辑**:在`hanoi_tower`函数中,基本思路是先将上层的n-1个圆盘从起始柱移动到辅助柱,然后将最底部的圆盘...

    数据结构设计--汉诺塔

    汉诺塔是一个经典的问题,源于印度的一个传说,它在数据结构设计中被广泛用来教授递归和算法思想。本报告将详细阐述如何利用数据结构来解决汉诺塔问题。 一、汉诺塔问题描述 汉诺塔问题由三个塔座A、B、C构成,塔座...

    VS开发进阶源码---汉诺塔

    汉诺塔是一个经典的递归问题,它源自一个古老的印度传说。在这个问题中,有三个柱子,分别标记为A、B、C,柱子A上有一叠大小不一的圆盘,目标是将所有圆盘从柱子A移动到柱子C,每次只能移动一个圆盘,并且任何时候大...

    C#汉诺塔非递归

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

    VB.NET---汉诺塔算法演示

    汉诺塔(Hanoi Tower)算法是计算机科学中一个经典的递归问题,它源自印度的一个传说。这个程序演示了如何用VB.NET实现汉诺塔的解决方案。VB.NET是一种基于.NET框架的面向对象编程语言,由微软公司开发,常用于创建...

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

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

    ARM嵌入式系统源程序-汉诺塔

    3. **汉诺塔**:汉诺塔是一个经典的递归问题,目标是将一堆盘子从一根柱子移动到另一根柱子,遵循以下规则:每次只能移动一个盘子;任何时候大盘子都不能位于小盘子之上。汉诺塔问题的解决方案通常使用递归算法,它...

    Python递归实现汉诺塔算法示例

    本文实例讲述了Python递归实现汉诺塔算法。分享给大家供大家参考,具体如下: 最近面试题,面试官让我5分钟实现汉诺塔算法(已然忘记汉诺塔是啥)。 痛定思痛,回来查了一下汉诺塔的题目和算法。题干与实现如下: A...

    python-汉诺塔.rar

    汉诺塔(Hanoi Tower)是一个经典的递归问题,源于19世纪法国数学家艾德蒙·朗利提出的一个谜题。在这个问题中,有三根柱子和一堆大小不一的圆盘,所有圆盘起初都堆在第一根柱子上,按照从大到小的顺序。目标是将...

    c++小游戏-汉诺塔

    经典的汉诺塔算法是一个自底向上的递归过程,通过将大问题分解为小问题来解决。在这个游戏中,程序会计算出最小的移动步骤,并在屏幕上展示每一步的过程。 6. **移动步骤呈现**:每一层圆盘的移动都需要精确控制。...

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

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

    matlab递归实现汉诺塔m函数文件(动画演示)

    matlab递归实现汉诺塔m函数文件 压缩包中含有两个文件hannuota.m和hanoi.m 其中,hannuota.m无动画演示,调用格式为: >>hannuota(5,'A','B','C') hanoi.m有动态演示汉诺塔功能,是在hannuota.m的基础上实现,调用...

    C++课程设计-汉诺塔

    在C++课程设计中,实现汉诺塔游戏是一个很好的实践项目,能够帮助学习者掌握递归算法、函数调用和问题解决策略。 首先,我们来看C++编程语言的基础知识。C++是一种静态类型的、编译式的、通用的、大小写敏感的、...

Global site tag (gtag.js) - Google Analytics