汉诺塔问题小结

hanoi

汉诺塔问题可能是递归入门一个绕不过的问题,也困扰了我好久,原理很简单,但是真的理解确实会废一点功夫,今天看了很多资料总算有一点认识


伪算法部分

if(n>1){

1. 先把A柱子上的n-1个盘子从A借助C传到B

2. 把A上的第n个盘子直接移到C

3. 再将B柱子上的n-1个盘子借助A移到C

}


此处之前的理解有点谬误 因为看了一本书上面将B作为目的节点造成了一点点烦恼


<pre name="code" class="cpp">#include <stdio.h>
#include <stdlib.h>
void hanoi(int n,char x,char y, char z)//x-->z pass by y
{
      if( 1==n)
      {
            printf("将%d号盘子%c-->%c\n",n,x,z);
      }
      else
      {
            hanoi(n-1,x,z,y);    //先把A柱子上的n-1个盘子从A借助C传到B
            printf("将%d号盘子%c-->%c\n",n,x,z);//把A上的第n个盘子直接移到C
            hanoi(n-1,y,x,z);//再将B柱子上的n-1个盘子借助A移到C
      }
}
int main()
{
        char x = 'A';
        char y = 'B';
        char z = 'C';
         printf("请输入盘子的个数:\n");
         int n =3;
        // scanf("%d",&n);
        hanoi(n,x,y,z);
        getchar( );
        return 0;

}







汉诺塔是一种经典的游戏和数学问题,它可以帮助我们理解递归算法的基本思想和应用。在本次实验中,我们学习了汉诺塔问题的递归解法,并利用Python编程实现了该算法。 首先,我们了解了汉诺塔问题的规则和基本思路。汉诺塔问题的规则是:有三个柱子A、B、C和n个大小不同的圆盘,开始时所有圆盘都放在柱子A上,要求将所有圆盘移到柱子C上,并满足以下条件:每次只能移动一个圆盘;大圆盘不能放在小圆盘上面。基本思路是通过递归算法,将问题分解成若干小问题,直到问题的规模足够小,可以直接解决。 然后,我们利用Python编写了汉诺塔问题的递归解法。在该程序中,我们定义了一个函数hanoi,使用三个参数表示当前的状态:起始柱子a、目标柱子c和中转柱子b。程序首先检查当前的问题规模是否足够小,如果是,则直接将圆盘从a移动到c;否则,将问题分解为两个小问题,一个是将n-1个圆盘从a移动到b,另一个是将最后一个圆盘从a移动到c,最后再将n-1个圆盘从b移动到c。 最后,我们进行了实验测试并总结了结果。我们通过设置不同的圆盘数量,测试了程序的运行时间。结果表明,程序的运行时间随着圆盘数量的增加而呈指数级增长。这是因为汉诺塔问题本身就是一种指数级别的问题,而递归算法的实现也会导致递归栈的深度增加,进而影响程序的效率。因此,在实际应用中,我们需要考虑如何优化算法,减少程序的运行时间。 综上所述,本次实验通过汉诺塔问题的递归解法及Python编程实现,帮助我们更深入地理解递归算法的基本思想和应用,并提高了我们的编程能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值