#include<stdio.h>
void move(char A,char B)
{
int static count = 1; 这个是拿来计算移动次数的
printf("%d ",count);
printf("%c-->%c\n",A,B);
count++;
}
void hanno(int n,char A,char B,char C)
{
if(n == 1)
{
move(A,C);
}
else
{
hanno(n-1,A,C,B); 我在这里出现过问题:A,B,C的顺序弄乱了
move(A,C); 我是这样理解的:将整个汉诺塔整体看成两部分,最下面的一个和剩下的
hanno(n-1,B,A,C); 部分,然后问题就转变为两个物块的情况,我们是这样处理的:将
} (n-1)个移动到B上,再将第n个移动到C上,最后将这(n-1)个
} 移动到C上;(我觉得这很好地体现了递归将大化小的思想)两个
hanno函数的作用可以概括为“将(n-1)个由A到B借助C,再由B
int main() 到C借助A“,中间的move可以理解为”将A上剩下的(最大的)移
{ 动到C”,处处体现着递归,只能说不愧是递归的代表习题。
int n = 0; 编者水平有限,欢迎大家提出意见,大家一起进步。
scanf("%d",&n);
hanno(n,'A','B','C');
return 0;
}