汉罗塔问题——C语言递归

#include <stdio.h>
int a=5,b=0,c=0,times=0;
void move(char start,char end,int n)
{
    if(end=='c') c++;
    else if(end=='b') b++;
    else if(end=='a') a++;
    if(start=='c') c--;
    else if(start=='b') b--;
    else if(start=='a') a--;
    times++;
    printf("第%d个圆盘:%c --> %c \n",n,start,end);
}

//a是存放圆盘的初始柱子,b作为中间柱子存放使用,c作为目标柱子,n表示从a移动到c的圆盘数
void hanoi(char a,char b,char c,int n){
    if(n==1){
        move(a,c,n);
    }else{ //将问题进行分解处理
        hanoi(a,c,b,n-1);//先把最上面的所有圆盘通过c作为中间柱,将所有圆盘从a移动到b
        move(a,c,n);//然后将最下面的圆盘移动到c
        hanoi(b,a,c,n-1);//将最上面的所有圆盘通过a作为中间柱,将所有圆盘从b移动到c
    }
}
int main()
{
    printf("游戏前%d:%d:%d\n",a,b,c);
    hanoi('a','b','c',5);
    printf("游戏后%d:%d:%d\n",a,b,c);
    printf("总共移动%d次",times);
}
posted @ 2022-10-08 22:15  TCcjx  阅读(31)  评论(0)    收藏  举报