C++_递归实现汉诺塔

10 篇文章 0 订阅
4 篇文章 0 订阅

A为存放盘子的塔,B为目标塔,C为辅助塔
算法分为三步
一、将A上n-1个盘子全部放到C塔上
二、将A上剩下的一个盘子放到B塔上
三、将C塔上的盘子全部放到B塔上

注:不需要考虑如何移动n-1个盘子

递归过程:
首先,将A上n-1个盘子放到C上,然后将A上剩下的一个盘子放到B上,然后可以看成A为辅助塔,B为目标塔,C为放盘子的(B中有一个最大的盘子,但任何盘子都能放到上面,所以可以看做为空),然后将C上n-2个盘子放到A上,剩下的地n-1个盘子放到B上,此时便完成了一次递归,然后不断地重复上述过程即可

代码

#include <iostream>

using namespace std;

void TowersofHanoi(int n,char x,char y,char z)
{

        if(n)
        {
            TowersofHanoi(n-1,x,z,y);//将n-1个盘子从x移动到z
            cout << "From" << x << "To" << y << endl;//将第n个盘子移动到y
            TowersofHanoi(n-1,z,y,x);//将z上的盘子移动到y
        }
}

int main()
{
    TowersofHanoi(3,'A','B','C');
    return 0;
}
  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值