题目描述:
有A、B、C三个柱子,初始n个圆盘都在A柱,要将其全部移动至C柱,计算步数。
递归算法思想:
递归边界:如果n==1,直接将A柱的圆盘移动到C柱上;
递归式:
将n-1个圆盘从A柱借助C柱移动到B柱上;
将A柱的最后一个圆盘移动到C柱上;
将n-1个圆盘从B柱借助A柱子移动到C柱上;
算法实现:
#include <stdio.h>
int cnt=0;
void move(char A,char C,int n){
cnt++;
printf("第%d步:把第%d个圆盘从%c--->%c\n",cnt, 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);
move(A,C,n);
hanoi(B,A,C,n-1);
}
}
int main(){
int n;
scanf("%d",&n);
hanoi('A','B','C',n);
return 0;
}