一.问题描述
一块板上有三根针 A、B、C。A 针上套有n个大小不等的圆盘,按照大的在下、小的在上的顺序排列,要把这 n 个圆盘从 A针移动到 C 针上,每次只能移动一个圆盘,移动过程可以借助 B 针。但在任何时候,任何针上的圆盘都必须保持大盘在下,小盘在上。从键盘输入需移动的圆盘个数n,给出移动的过程。
二.代码展示
#include <stdio.h>
//先声明要定义的函数
void hanoi(int n, char from, char by, char to);
void move(char from, char to);
int main(){
int m;
scanf_s("%d", &m);
hanoi(m, 'A', 'B','C');
return 0;
}
//递归法,分三步
void hanoi(int n, char from, char by, char to){
if (n < 1) return;
//注意from,by,to的顺序变化
hanoi(n - 1, from, to, by);//第一步:将n-1个盘子移到中间的针上(递归)
move(from, to); //第二步:将在下面的盘子移到右边的针上
hanoi(n - 1, by, from, to);//第三步:将剩余n-1个盘子从中间的针移到最右边的针上(递归)
}
//移动方式
void move(char from,char to){
printf("%c->%c\n", from, to);
}
三.感受
这是老师写的代码,除去注释只有18行。递归的方式真的很值得学习,每次栞都会有新的感受!