汉诺塔递归方法和非递归方法

三个盘子为A,B,C,其中C是中介盘,我们要遵守移动规则将A上的盘子要全部通过B移动到C。
#include
#include
using namespace std;
#define MaxSize 50
typedef struct
{
    int n;      //盘片的个数
    char x,y,z; //3个塔座
    bool flag;  //可直接移动盘片时true,否则false
}ElemType;      //顺序栈中元素类型
typedef struct
{
    ElemType data[MaxSize];//存放元素
    int top;   //栈顶指针
}StackType;    //顺序栈的类型
void InitStack(StackType *&s)//初始化
{
    s=(StackType *)malloc(sizeof(StackType));
    s->top=-1;
}
void DestoryStack(StackType *&s)//销毁栈
{
    free(s);
}
bool StackEmpty(StackType *s)//判断栈是否为空
{
    return(s->top==-1);
}
bool Push(StackType *&s,ElemType e)//进栈
{
    if(s->top==MaxSize-1)//栈满
        return false;
    s->top++;
    s->data[s->top]=e;
    return true;
}
bool Pop(StackType *&s,ElemType &e)//出栈
{
    if(s->top==-1)//栈为空
        return false;
    e=s->data[s->top];//取栈顶元素
    s->top--;         //栈顶指针减1
    return true;
}
void Hanoil(int n,char X,char Y,char Z)//递归方法
{
    if(n==1)
        cout<<"\t"<<"将第"<>n;
    cout<<"采用递归方法求解Hanoi问题过程如下"<

你可能感兴趣的:(递归,c++)