汉诺塔问题的简单实现

        汉诺塔问题还能怎么办,肯定得递归了,但简单,清晰,效率,高能,才是我们实现的重中之重,接下来通过很简单的递归算法实现它:

        首先,不妨设置是那个柱子为A,B,C,在函数中,我们用x,y,z表示引入:

int hannuota(int n,char x,char y,char z);

        写出执行函数:

int hannuota(int n,char x,char y,char z){
    if(n==1){
        cout<<"A"<<"-->"<<"C"<<endl;
        cnt+=1;
    }    
    else{
        hannuota(n-1,'A','C','B');
        cout<<x<<"-->"<<z<<endl;
        cnt+=1;
        hannuota(n-1,'B','A','C');
    }
    return cnt;
}

        利用全局变量实现计数:

int cnt=0;//写在头部位置作静态变量

        输入汉诺塔个数:

 int n;
 cin>>n;

        整合算法实现:

#include<iostream>
using namespace std;
int hannuota(int n,char x,char y,char z);
int cnt=0;
int main(){
    int n;
    cin>>n;
    cout<<hannuota(n,'A','B','C');
}
int hannuota(int n,char x,char y,char z){
    if(n==1){
        cout<<"A"<<"-->"<<"C"<<endl;
        cnt+=1;
    }    
    else{
        hannuota(n-1,'A','C','B');
        cout<<x<<"-->"<<z<<endl;
        cnt+=1;
        hannuota(n-1,'B','A','C');
    }
    return cnt;
}

        其实就是这样,这套算法干净利索,不拖泥带水,我想这大抵是已经最简单的算法实现了!

        执行函数还得很值得一看的!

        虽然看着简洁,运行却很是麻烦,不断进栈出栈,所幸不是我们操作!

  • 37
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值