#include<stdio.h>
int hannt(int n);
int main()
{
int n=0;
int i=0;
scanf("%d",&n);
i=hannt(n);
printf("%d\n",i);
return 0;
}
int hannt(int n)
{
if(n<=3)
return 7;
else
return 1+2*hannt(n-1);
}
三个盘子要移动7步,这是固定的。当四个盘子时,它先要把最上面的三个盘子移动到另外一根针上(这时移动了7步),然后把第四个盘子移动到另一根针上(这时共移动了8步,三个盘子的7步加上第四个盘子的1步),最后再把那三个盘子移动到第四个盘子上面(又是7步)。
所以,四个盘子要移动15步。五个盘子也是同样,我们知道了四个盘子的移动步数是15步,那么5个盘子就是15+1+15等于31步。
由此得出结论:每增加一个盘子,它的移动步数就增加原来步数的一倍加1。我们已经知道5个盘子移动31步,那么,6盘子就是31*2+1=63步。7盘子就是63*2+1=127步
由此我们可以返回的函数值为,当前盘子数-1时的移动步数+最后当前盘子移动的一步+当前盘子数-1时的移动步数,即两倍的当前盘子数-1时的移动步数+1