汉诺塔问题小结

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;

}

 





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值