递归求汉诺塔的解

递归求汉诺塔的解

// 递归求汉诺塔的解.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 Tower Implementation---\n");
    /*输入共有几个盘子在A柱子中*/
    printf("How many disks in A ?\n");
    scanf("%d",&n);
    if(n==0)
        printf("no disks to move\n");
    else
        HanoiTower(n,A,B,C);
    system("pause");
}
void HanoiTower(int n,char a,char b,char c)
{
    if(n==1)
        printf("Move disk 1 from %c->%c\n",a,c);
    else
        {
        /*将A上n-1个盘子借助C移至B*/
        HanoiTower(n-1,a,c,b);
        printf("Move disk %d from %c->%c\n",n,a,c);
        /*将B上n-1个盘子借助A移至C*/
        HanoiTower(n-1,b,a,c);
         }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-17 00:47:29

递归求汉诺塔的解的相关文章

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);

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

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

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') 运行结果如下:

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)

递归之汉诺塔

递归的定义: 一个函数自己直接或间接调用自己(一个函数调用另外 一个函数和他调用自己是一模一样的,都是那三步, 只不过在人看来有点诡异.) 递归满足的三个条件: 1.递归必须得有一个明确的终止条件 2.该函数处理的数据规模必须在递减 3.这个转化必须是可解的. 循环和递归: 理论上循环能解决的,肯定可以转化为递归,但是这个 过程是复杂的数学转化过程,递归能解决不一定能转化 为循环,我们初学者只要把经典的递归算法看懂就行, 至于有没有能力运用看个人. 递归: 易于理解 速度慢 存储空间大 循环 不

递归解决汉诺塔问题

汉诺塔问题:有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方,求至少需要多少次移动. 我们首先假设n=1,那么move(n)=1,因为这时候只需要从A->C便可以.接下来假设n=2,那么move(n)=3 即A->B,A->C,B->C; 假设n=3,move(n)=7 即A->C,A->b,C->B,A->C,B->A,B-

递归之汉诺塔问题

有三根杆子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——