使用递归算法实现汉诺塔

汉诺塔原理解析:

当只有一个盘子的时候,只需要从将A塔上的一个盘子移到C塔上。

            当A塔上有两个盘子是,先将A塔上的1号盘子(编号从上到下)移动到B塔上,再将A塔上的2号盘子移动的C塔上,最后将B塔上的小盘子移动到C塔上。

            当A塔上有3个盘子时,先将A塔上编号1至2的盘子(共2个)移动到B塔上(需借助C塔),然后将A塔上的3号最大的盘子移动到C塔,最后将B塔上的两个盘子借助A塔移动到C塔上。

           当A塔上有n个盘子是,先将A塔上编号1至n-1的盘子(共n-1个)移动到B塔上(借助C塔),然后将A塔上最大的n号盘子移动到C塔上,最后将B塔上的n-1个盘子借助A塔移动到C塔上。

          综上所述,除了只有一个盘子时不需要借助其他塔外,其余情况均一样。

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <span style="font-size:14px;">#include <iostream>  
  2. using namespace std;  
  3. int hannuota(int n,string a,string b,string c)  
  4. {  
  5.     if(n==1)  
  6.     {  
  7.         //只有一个盘子的情况下直接将第一个塔上的盘子移动到第三个塔  
  8.         printf("塔%s------>塔%s\n",a.c_str(),c.c_str());  
  9.     }  
  10.     else{  
  11.         //1.先将第一个塔的n-1个盘子全部通过第三个塔移动到第二个塔上  
  12.         hannuota(n-1,a, c, b);  
  13.         //2.再将剩下的一个盘子移动到第三个塔上  
  14.         printf("塔%s------>塔%s\n",a.c_str(),c.c_str());  
  15.         //3.最后将第二个塔上的盘子通过第一个塔移动到第三个塔上  
  16.         hannuota(n-1, b, a, c);  
  17.     }  
  18.     return 1;  
  19. }  
  20. int main(int argc, const char * argv[]) {  
  21.     printf("请输入盘子的数量:\n");  
  22.     int n;  
  23.     scanf("%d",&n);  
  24.     printf("盘子移动如下:\n");  
  25.     hannuota(n,"A","B","C");  
  26.     return 0;  
  27. }</span>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值