汉诺塔问题 递归

/********************************************************
FileName:hanoi.c
Author:Dong Xitian
Version:1
Function:汉诺(Hanoi)塔问题:古代有一个梵塔,塔内有三个座A、B、C,
        A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图)。
        有一个和尚想把这64个盘子从A座移到B座,但每次只能允许移动一个盘子,
        并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。
        在移动过程中可以利用B座,要求打印移动的步骤。
Date(Y/M/D):2011/11/23
*******************************************************/

#include <stdio.h>
int i = 0;
void Move(char chSour,char chDest)
{
    // 打印移动步骤
    i++;
    printf("\n------->Move the top plate of %c to %c",chSour,chDest);
    printf("\nThis is %d",i);
}
/******************************************************
    Hanoi函数的第一个参数表示盘子的数量,第二个参数表示源座,
    第三个参数表示借用的座,第四个参数代表目的座。
    比如Hanoi(n-1,A,C,B)表示借助C座把n-1个盘子从A座移动到B座。
    Move函数的第一个参数表示源座,第二个参数代表目的座。
    Move函数的功能是将源座最上面的一个盘子移动到目的座上。
******************************************************/
Hanoi(int n,char chA,char chB,char chC)
{
    if(n == 1)
    {
        Move(chA,chC);
        //printf("\n%s","111111---->");
    }else/*盘子数大于1,继续进行递归过程*/
    {
        Hanoi(n-1,chA,chC,chB);
        Move(chA,chC);
        Hanoi(n-1,chB,chA,chC);
    }
}
int main(int argc, const char *argv[])
{
    int n;
    /*输入盘子数量*/
    printf("Please Input number of the Plates:  ");
    scanf("%d",&n);
    getchar();//回收回车
    printf("Moving %d Plates from A to C:\n",n);
    //调用函数计算,并打印输出结果
    Hanoi(n,'A','B','C');
    putchar('\n'); 
    return 0;
}

你可能感兴趣的:(汉诺塔问题 递归)