编程训练[C语言]——最经典的递归题:汉诺塔

汉诺塔的代码当然是要背诵的。

【题目描述】
输入n,代表有n个圆盘。共有a,b,c三个杆子,输出结果表示如何移动圆盘,完成汉诺塔的求解。

【示例代码】
算法描述见注释。

令人费解的事情:9~11行和13~15行长得一样对吧?但是9~11行会报错Expected expression。至今我未发现有什么不同,也许是xcode的bug?

//
//  算法描述:先将1~n-1号从a移动到b,然后将n号从a移动到c,然后将1~n号从b移动到c
//

#include<stdio.h>

#define MAX_N 20

//void Move(int n,char a,char b){ //将n号圆盘从a移动到b   //Expected expression
//    printf("编号为%d的盘子:%c==>%c\n",n,a,b);
//}

void Move(int n,char a,char b){ //将n号圆盘从a移动到b
    printf("编号为%d的盘子:%c==>%c\n",n,a,b);
}

void Hanoi(int n,char a,char b,char c){ //将1~n号圆盘从a杆移动到c杆,b杆为辅助
    if(n>0){    //限定递归边界
        Hanoi(n-1,a,c,b);   //先将1~n-1号圆盘从a移动到b
        Move(n,a,c);    //将n号从a移动到c
        Hanoi(n-1,b,a,c);   //将1~n-1号从b移动到c
    }
}

int main(){
    int n;
    while(scanf("%d",&n)==1){
        Hanoi(n,'a','b','c');   //注意不要将'a','b','c'写成a,b,c
    }
    
    return 0;
}

发布了36 篇原创文章 · 获赞 41 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/umbrellalalalala/article/details/88089205
今日推荐