汉诺塔是一个经典的递归算法题目,其核心是每一步的移动都是最小的在上面,在三个柱子上,第一次移动的时候,主要是将A柱最大的圆盘上面的全部移走,此时通过C柱移到B柱,再将A柱上最大的圆盘移到C柱,此时其余的圆盘全在B柱上,第二次则是将B柱上的圆盘通过A柱移到C柱上,这样就完成了一个汉诺塔的移动,代码如下。
//打印函数,打印汉诺塔移动步骤
void print(char a,char b){
printf("%c --> %c\n",a,b);
}
//汉诺塔问题---->递归算法函数
void Hanoi(int n,char s1,char s2,char s3){
if(n == 1)
print(s1,s3);
else
{
Hanoi(n-1,s1,s3,s2);
print(s1,s3);
Hanoi(n-1,s2,s1,s3);
}
}
int main(){
Hanoi(3,'A','B','C');//此处传入四个参数,分别是汉诺塔层数、A、B、C三个柱
return 0;
}