首先是汉罗塔的递归实现
#include <stdio.h>
void move(char a,int n,char b){
//把编号为n的盘从a移动到b
printf("Move %d from %c to %c\n",n,a,b);
}
void hanio(int n,char x,char y,char z){
//把编号从1到n的盘通过y做辅助从x移动到z
//要求:
//1.每次只能移动一个盘
//2.任何时候大盘(这里是编号大的)不能在小盘之上
if(n==1){
move(x,1,z);
}else{
hanio(n-1,x,z,y);
move(x,n,z);
hanio(n-1,y,x,z);
}
}
int main(){
hanio(3,'A','B','C');
return 0;
}
运行结果如下:
n=3时:移动2^3-1=7次
当n=4时:移动2^4-1=15次
所以移动次数成指数增长