题目
有3根柱子分别是A,B,C,输入一个数n,代表A柱子上有n个盘子(分别从上到下标号为1,2,3,……,n
),输出搬动金片的全过程步骤。
效果预览
代码呈现
#include<stdio.h>
void p(int n,char a,char b)//打印函数
{
printf("Move disk %d from %c to %c\n",n,a,b);
}
void move(int n,char a,char b,char c)//代表借助b,将n个盘子从a移到c
{
if(n==1){p(n,a,c);}//结束的情况
else{move(n-1,a,c,b);
p(n,a,c);//将a上剩余的一个n号盘子移到c
move(n-1,b,a,c);//将b上剩余的一个n-1号盘子移到c
}
}
int main(){
int n;
scanf("%d",&n);
move(n,'A','B','C');
return 0;
}
问题回顾
写递归函数时只要考虑结束情况和一个宏观的步骤(如将b上剩余的一个n-1号盘子移到c),其他的不用考虑,因为递归是无穷的,比较难想象,非常抽象,我们应该用一个具体的一小段过程代表整体。此题还可以加上步数计算,只需在p函数中增加一个变量即可。