汉诺塔问题的两个规则
1.每次移动一个圆盘
2.大盘不能放在小盘上面
解决n层汉诺塔问题的思路
1.将上面n-1层通过C移动到B(我姑且称之为一次n-1层汉诺操作)
2.将第n层移动到C,此时的n-1层变成新的第n层
3.将B的n-1层移动到C(又是一次n-1层的汉诺操作)
所以解决n层汉诺塔问题,需要的步骤为 2*n-1层汉诺操作+1
代码
#include<stdio.h>
//使用递归的方法计算n层汉诺塔需要的步数
int hanio(int n)
{
if (n == 1)
return 1;
else
return 2 * hanio(n - 1) + 1;
}
int main()
{
int n;
int step;
printf("Please input the number of Hanio's storey\n");
scanf("%d", &n);
step = hanio(n);
printf("It takes %d steps to solve %d-storey Hanio problem\n",step,n);
return 0;
}