开发者社区> 问答> 正文

汉诺塔问题的递归求解算法,并分析算法的时间复杂性

RT

展开
收起
知与谁同 2018-07-21 16:52:39 2111 0
2 条回答
写回答
取消 提交回答
  • 胜天半子
    #include<iostream>
    using namespace std;
    int sum=0;
    void hanoi(int n,char A,char B,char C)
    {
    if(n==1)
    {
    cout<<"将第"<<n<<"块"<<"从"<<A<<"塔"<<"移到"<<C<<"塔"<<endl;
    sum++;
    }
    else
    {
    hanoi(n-1,A,C,B);
    cout<<"将第"<<n<<"块"<<"从"<<A<<"塔"<<"移到"<<C<<"塔"<<endl;
    sum++;
    hanoi(n-1,B,A,C);
    }
    }
    void main()
    {
    int n;
    cin>>n;
    hanoi(n,'A','B','C');
    cout<<"一共移了"<<sum<<"次"<<endl;
    system("pause");

    }

    时间复杂度O(2^n)
    2019-07-17 22:54:47
    赞同 展开评论 打赏
  • void Hanoi(int n, char a, char b, char c)
    {
    if(n==1) //只有一个盘子,直接移动
    printf("move %c to %c\n", a, c);
    else
    {
    Hanoi(n-1, a, c, b); //将n-1个盘子从a柱移动到b柱
    printf("move %c to %c\n", a, c); //将最后一个盘子从a柱移动到c柱
    Hanoi(n-1, b, a, c); //将n-1个盘子从b柱移动到c柱
    }
    }时间复杂度下限是O(2n)
    2019-07-17 22:54:46
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
数据+算法定义新世界 立即下载
袋鼠云基于实时计算的反黄牛算法 立即下载
Alink:基于Apache Flink的算法平台 立即下载