欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

递归:汉诺塔问题

程序员文章站 2022-04-13 12:19:34
...

1.题目

递归:汉诺塔问题

2.思路

    1、把A上面n-1个盘子移动到B上。
    2、把A上最后一个移动到C;
    3、把B上n-1个移动到A上,再把B上最后一个移动到C;

如此循环2,3,步骤,直到把最后一个盘子移动到C上

3.代码

/*
* @Author: yajie
* @Date:   2018-05-15 21:05:20
* @Last Modified by:   yajie
* @Last Modified time: 2018-05-15 21:23:52
*/

#include <iostream>
using namespace std;


//将 src坐上吨n个盘子,以 mid坐为中转,移动到dest 坐
void Hanoi(int n, char src, char mid, char dest)
{

    if(n == 1){ //1.1直接 从 src 移动至dest
        cout << src << "->" << dest << endl;
        return;
    }
    //1.2否则,先将上面 n-1 个盘子,以dest 坐为中转,移动到mid 坐
    Hanoi(n-1,src,dest,mid);
    //1.3 再将 剩下那个 从src 移动到 dest
    cout << src << "->" << dest << endl;
    //1.4 最后将 n-1 个盘子,从mid 移动到 dest
    Hanoi(n-1,mid,src,dest);
    return;
}

int main()
{
    int n;//输入盘子的个数
    cin >> n;
    Hanoi(n,'A','B','C');
    return 0;
}


相关标签: 递归 汉诺塔