你们好,最近小活发现有诸多的小伙伴们对于汉诺塔递归算法思想,汉诺塔递归算法这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。
1、汉诺塔(hanio)问题:
2、伪算法:n个盘子,从a搬到c
3、hanio(n个盘子,从a搬到c)
4、{
5、 if(n==1)
6、 直接把盘子从a搬到c;
7、 else
8、 {
9、 hanio(n-1个盘子,从a先搬到b);
10、 最后第n个盘子,从a搬到c;
11、 hanio(n-1个盘子,从b搬到c);
12、 }
13、}
14、代码:
15、void hanio(int n,char a,char b,char c)//搬n个盘子从a到c,b为过渡
16、{
17、 if(n == 1)
18、 printf("%c-->%c\n",a,c);//只有一个盘子,直接从a搬到c
19、 else
20、 {
21、 hanio(n-1,a,c,b);//先将a塔上面(最大的在下面)的n-1个盘子,搬到b,c为过渡
22、 printf("%c-->%c\n",a,c);//再把最后一个盘子从a搬到c
23、 hanio(n-1,b,a,c);//搬完之后n-1个盘子搬到了b塔,b开始做为开始塔,a为过渡塔,将n-1个盘子从b搬到c
24、 }
25、}
26、函数hanio(n,a,b,c)
27、其中,参数n:表示一共有n个盘子;
28、第二个参数a,表示起始塔;
29、第三个参数b,表示过渡塔;
30、第四个参数c,表示目的地塔;
31、(总之就是从第二个参数搬到第四个参数,谁在那个位置,就代表了那个位置参数的意义)
以上就是汉诺塔递归算法这篇文章的一些介绍,希望对大家有所帮助。
标签:
免责声明:本文由用户上传,如有侵权请联系删除!