栈实现递归实现汉诺塔问题

 1 public class JavaDemo {
 2     private int c = 0;
 3
 4     public static void main(String[] args) {
 5         JavaDemo demo = new JavaDemo();
 6         demo.hanoi(3, ‘x‘, ‘y‘, ‘z‘);
 7     }
 8
 9     public void hanoi(int n, char x, char y, char z){
10     if(n == 1){
11         move(x, 1, z);
12     }else{
13         hanoi(n - 1, x, z, y);
14         move(x, n, z);
15         hanoi(n - 1, y, x, z);
16     }
17     }
18
19     public void move(char x, int n, char z){
20         System.out.println("第" + ++c + "次移动:" + n + "号圆盘," + x + "->" + z);
21     }
22 }
时间: 2024-11-12 10:16:31

栈实现递归实现汉诺塔问题的相关文章

16、蛤蟆的数据结构笔记之十六栈的应用之栈与递归之汉诺塔问题

16.蛤蟆的数据结构笔记之十六栈的应用之栈与递归之汉诺塔问题 本篇名言:"人生的价值,并不是用时间,而是用深度去衡量的." 继续栈与递归应用,汉诺塔问题. 欢迎转载,转载请标明出处: 1.  汉诺塔问题 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一

20150410 递归实现汉诺塔算法

20150410 递归实现汉诺塔算法 2015-04-10 Lover雪儿 1 //汉诺塔 2 #include <stdio.h> 3 4 static int i = 0; 5 6 //将n个盘子从x借助y移动z 7 //n:移动的个数 x:源地址 y:中间柱子 z:目的柱子 8 void move(int n, char x, char y, char z) 9 { 10 if(1 == n){ 11 printf("第%d次移动 %c--->%c\n", ++

递归__汉诺塔

要将n个盘子从a 通过b 移动到c那么 就要先将 n-1个盘子从a通过c 移动到b再将a最底下的盘子移动到 c之后再将 n-1个盘子从b通过a移动到c由此可得到 递归公式hanoi(int n,char from,char denpend_on,char to):{ //n:盘子数from:a,denpend_on:b,to:c //此语句意义为 将n个盘子从from 通过 denpend_on移动到tohanoi(n-1,from,to,denpend_on);move(n,from,to);

Python递归实现汉诺塔

Python递归实现汉诺塔: def f3(n,x,y,z): if(n==1): print(x,'--->',z) else: f3(n-1,x,z,y) print(x,'--->',z) f3(n-1,y,x,z) n=int(input('请输入汉罗塔层数:')) f3(n,'X','Y','Z') 运行结果如下:

递归求汉诺塔的解

递归求汉诺塔的解 // 递归求汉诺塔的解.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<stdio.h> #include<conio.h> #include<windows.h> void HanoiTower(int,char,char,char); void main() { int n; char A='A',B='B',C='C'; printf("---Hanoi To

Go基础之函数递归实现汉诺塔

Go递归实现汉诺塔 package main import "fmt" // a 是源,b 借助, c 目的长度 func tower(a, b, c string, layer int) { if layer == 1 { fmt.Println(a, "111->", c) return } // n-1 个 a 借助 c 到 b tower(a, c, b, layer-1) fmt.Println(a, "11->", c)

面试题 08.06. 汉诺塔问题(非递归实现汉诺塔问题)

题目: 在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子.一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面).移动圆盘时受到以下限制:(1) 每次只能移动一个盘子;(2) 盘子只能从柱子顶端滑出移到下一根柱子;(3) 盘子只能叠在比它大的盘子上. 请编写程序,用栈将所有盘子从第一根柱子移到最后一根柱子. 你需要原地修改栈. 示例1: 输入:A = [2, 1, 0], B = [], C = [] 输出:C = [2,

递归之汉诺塔问题

有三根杆子A,B,C.A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小.要求按下列规则将所有圆盘移至C杆: 每次只能移动一个圆盘: 大盘不能叠在小盘上面. 提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须遵循上述两条规则. 问:如何移?最少要移动多少次? 这个问题也就是著名的汉诺塔问题,以上对问题的描述摘于维基百科(因为懒,所以不手打了),对于这个问题的详细描述请点击一下维基百科的页面. 对于这个问题,刚开始确实不太好理解,不过我们可以从三个圆盘开始,最简单的方法

数据结构(java语言描述)递归实现——汉诺塔问题

1.汉诺塔问题描述 N阶汉诺塔:假设有3个分别命名为x,y,z的三个塔座,在x上有n个盘子,直径大小不同,有小到大按标号1,2,3...n排列,要借助y将n个盘子转移到z上,期间不能让小盘子压在大盘子上.规则: 每次至移动一个盘子: 盘子可以插在x,y,z任意一个塔座上: 任何时候都不能将大盘压在小盘上. 2.解题思路 当n=1时,直接把盘子由x——>z; 当n>1时,需利用y,首先将(n-1)个盘子由x——>y,把第n个实现x——>z,然后把问题转换为实现(n-1)个盘子由y——