什么是汉诺塔 汉诺塔1到9最快分别是几次。可以告诉我计算方法吗?
汉诺塔1到9最快分别是几次。可以告诉我计算方法吗?
河内塔是一个迭代问题。假设河内塔从第一列移动到最后一列(目标列)的最快次数是f(x)。显然,f(1)=1,f(2)=3。然后我们可以把整个过程分为三个部分。首先,我们可以将第一层和第二层移动到中间列(过渡列),用最快的f(2)步骤2,将第三层移动到最后一列(目标列),最快的步骤是3,将第一层和第二层移动到最后一列,最快的步骤是f(2),因此f(3)=f(2)1f(2)=7,依此类推,f(4)=f(3)1f(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(x1)=2*f(x)1。此外,还可以得到通式F(x)=2^x-1
汉诺塔递归算法?
1//河内塔
2#include<stdio。H>
3 void Hanoi(int n,char a,char b,char c)//这里的意思是在b列的帮助下将a列上的图版移到c列
4{if(1)==n)//如果是图版,将a列上的图版移到c列
5{
6 printf(%c-->%cn,a,c)
7}
8 else
9{
10 Hanoi n-1,a,c,b)//移动借助C列
11 Printf(%C-->%CN“,a,C)//将a列的最后一块板移到C列
12 Hanoi(N-1,B,a,c) //然后将B列上的N-1个板移到c
13}
14}
15 int main()
16{int N
17 printf(“input the number of disks:”)
18 scanf(%d“,&n)
19 Hanoi(N,“a”,“B”,“c”)
20 return 0
21}
]复制代码
理论上是可能的,但是有些算法使用递归描述将更加简洁和清晰,尽管性能比迭代慢。目前,一些用递归转化为迭代的算法比较复杂,如典型的汉诺塔问题。虽然在线流程图例已通过迭代求解,但其正确性尚未得到研究者的证实。目前,递归仍然被广泛地用于实现它。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。