汉诺塔1到9最快分别是几次? 可以告诉我计算方法吗? 汉诺塔移动次数

\u6c49\u8bfa\u5854\u6709\u4e16\u754c\u7eaa\u5f55\u5417\uff1f\u5982\u679c\u6709\u7684\u8bdd\uff0c\u5404\u5c42\u5206\u522b\u662f\u591a\u5c11\uff1f

\u6c49\u8bfa\u5854\u662f\u4e00\u4e2a\u8fed\u4ee3\u95ee\u9898\uff0c\u6211\u4eec\u5148\u5047\u8bbex\u5c42\u6c49\u8bfa\u5854\u4ece\u7b2c\u4e00\u6839\u67f1\u5b50\u79fb\u52a8\u5230\u6700\u540e\u4e00\u6839\u67f1\u5b50\uff08\u76ee\u6807\u67f1\u5b50\uff09\u7684\u6700\u5feb\u6b21\u6570\u662ff(x)\u6b21\u663e\u7136f(1)=1f(2)=3\u7136\u540e\u770b3\u5c42\u7684\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u6574\u4e2a\u8fc7\u7a0b\u5206\u89e3\u4e3a\u4e09\u4e2a\u90e8\u5206\u4e00\uff0c\u628a\u7b2c\u4e00\u7b2c\u4e8c\u5c42\u79fb\u52a8\u5230\u4e2d\u95f4\u7684\u67f1\u5b50\uff08\u8fc7\u6e21\u67f1\u5b50\uff09\uff0c\u6700\u5febf(2)\u6b65\u4e8c\uff0c\u628a\u7b2c\u4e09\u5c42\u79fb\u52a8\u5230\u6700\u540e\u4e00\u6839\u67f1\u5b50\uff08\u76ee\u6807\u67f1\u5b50\uff09\uff0c\u6700\u5feb1\u6b65\u4e09\uff0c\u628a\u521a\u624d\u79fb\u52a8\u5230\u4e2d\u95f4\u67f1\u5b50\u7684\u7b2c\u4e00\u7b2c\u4e8c\u5c42\u79fb\u52a8\u5230\u6700\u540e\u4e00\u6839\u67f1\u5b50\uff0c\u6700\u5febf(2)\u6b65\u6240\u4ee5f(3)=f(2)+1+f(2)=7\u7136\u540e\u4ee5\u6b64\u7c7b\u63a8f(4)=f(3)+1+f(3)=15f(5)=f(4)+1+f(4)=31f(6)=f(5)+1+f(5)=63f(7)=f(6)+1+f(6)=127f(8)=f(7)+1+f(7)=255f(9)=f(8)+1+f(8)=511PS.\u5982\u679c\u5b66\u4e60\u8fc7\u6570\u5217\u7684\u8bdd\uff0c\u8fd9\u4e2a\u5176\u5b9e\u53ef\u4ee5\u5f97\u5230\u66f4\u4e3a\u4e00\u822c\u7684\u9012\u63a8\u516c\u5f0ff(x+1)=2*f(x)+1\u518d\u8fdb\u4e00\u6b65\uff0c\u53ef\u4ee5\u5f97\u5230\u901a\u9879\u516c\u5f0f\u4e3af(x)=2^x-1

#include
int main()
{
int n;
printf("\u8bf7\u8f93\u5165\u6c49\u8bfa\u5854\u7684\u91d1\u7247\u6570: ");
scanf("%d",&n);
void hanoi(int n, int a, int b, int c, int &step);
int step = 0;
hanoi(n,1,2,3, step);
printf("\u79fb\u52a8\u4e86%d\u6b21\n", step);
return 0;
}


void hanoi(int n, int a, int b, int c, int &step)
{
if (n==0)
return;
if (n==1)
{
printf("%d -> %d\n\n",a,c);
step++;
}
else
{
hanoi(n-1,a,c,b, step);
printf("%d -> %d\n\n",a,c);
step++;
hanoi(n-1,b,a,c, step);
}
}

1层:1次

2层:3次

3层:7次

4层:15次

5层:31次

6层:63次

7层:127次

8层:255次

9层:511次

计算公式:f(x)=2^x-1 

扩展资料

计算公式推导过程如下:

假设有n个圆盘,移动次数为f(n),根据经验,f(1)=1,f(2)=3

以3层为例,进行推导。可把整个过程分成三步,其中三个圆盘分别用A、B、C、代替且A的半径<B的半径<C的半径

1、把A、B移到中间的柱子,需要f(2)步

2、把C移动到第三根柱子,需要1步

3、把A、B再移动到第三根柱子,需要f(2)步

所以f(3)=f(2)+1+f(2)=7

同理,当圆盘数量为4时,三个步骤分别需要f(3)步、1步、f(3)步,即f(4)=f(3)+1+f(3)=15

由此可得递推公式:f(x+1)=2*f(x)+1

进一步可以通项公式:f(x)=2^x-1

参考资料来源:百度百科-汉诺塔



汉诺塔是一个迭代问题,我们先假设x层汉诺塔从第一根柱子移动到最后一根柱子(目标柱子)的最快次数是f(x)次
显然f(1)=1
f(2)=3
然后看3层的,我们可以把整个过程分解为三个部分
一,把第一第二层移动到中间的柱子(过渡柱子),最快f(2)步
二,把第三层移动到最后一根柱子(目标柱子),最快1步
三,把刚才移动到中间柱子的第一第二层移动到最后一根柱子,最快f(2)步
所以f(3)=f(2)+1+f(2)=7
然后以此类推
f(4)=f(3)+1+f(3)=15
f(5)=f(4)+1+f(4)=31
f(6)=f(5)+1+f(5)=63
f(7)=f(6)+1+f(6)=127
f(8)=f(7)+1+f(7)=255
f(9)=f(8)+1+f(8)=511

PS.如果学习过数列的话,这个其实可以得到更为一般的递推公式
f(x+1)=2*f(x)+1
再进一步,可以得到通项公式为
f(x)=2^x-1

N根=2的N次方-1次

七层汉诺塔共要:
127步

扩展阅读:汉诺塔6层最少多少步 ... 汉诺塔6个最快 ... 五个汉诺塔步骤图 ... 汉诺塔七层视频教学 完整 ... 8层汉诺塔诀窍 ... 汉诺塔5层31层详细图解 ... 汉诺塔图解一步一图 ... 汉诺塔8层最快几分钟 ... 汉诺塔算法流程图 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网