美文网首页
笔记02:汉诺塔递归问题

笔记02:汉诺塔递归问题

作者: Wayne_Dream | 来源:发表于2018-10-23 17:54 被阅读75次

    游戏的目标:把A杆上的圆盘全部移到C杆上,并仍保持原有顺序叠好。
    操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。

    详见视频
    在B站看到这个up的讲解,瞬间领悟,讲的非常好!在这里贴一个c++实现的代码。
    关键点就是把目标任务拆解为三部分:
    假设目标是将N个盘子从A移动到C,那么就可以拆解为先将N-1个盘子从A借助C移到B,再将A中的底盘移动到C,最后将B借助A移动到C,依次循环,直到只剩一个盘子。

    c++

    #include <iostream>
    
    using namespace std;
    
    void Hanoi(int n, char x, char y, char z)
    {
        if (n == 1)
        {
            cout << x << "--->" << z << endl;
        }
        else
        {
            Hanoi(n - 1, x, z, y);
            cout << x << "--->" << z << endl;
            Hanoi(n - 1, y, x, z);
        }
    }
    
    int main()
    {
        int num;
        cout << "请输入汉诺塔层数" << endl;
        cin >> num;
        Hanoi(num, 'A', 'B', 'C');
        system("pause");
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:笔记02:汉诺塔递归问题

          本文链接:https://www.haomeiwen.com/subject/wuiazftx.html