目录
递归代码
汉诺塔其实可以看作两个步骤:
1.把n-1个盘子移动到中间
2.把第n个盘子移动到最右边
注意:这里的中间和最右边不是固定的,都是指代的相对的位置
#include<iostream>
using namespace std;
void move(int n,char from,char buf,char to)
{
if(n==1)
printf("%c-->%c\n",from,to);
else
{
move(n-1,from,to,buf);
printf("%c-->%c\n",from,to);
move(n-1,buf,from,to);
}
}
int main()
{
int n;
printf("int putnumber:");
scanf("%d",&n);
printf("the step to moving %2d diskes:\n",n);
move(n,'a','b','c');
return 0;
}
塔数 | 步数 | 规律 |
---|---|---|
1 | 1 | 2^1 - 1 |
2 | 3 | 2^2 - 1 |
3 | 7 | 2^3 - 1 |
4 | 15 | 2^ 4 - 1 |
5 | 31 | 2^5 - 1 |
… | … | 2^n - 1 |
数学规律
f(n)=2^n-1;
递推公式:
f(n) = 2 * f (n - 1) +1;