递归:汉诺塔问题

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;
}


猜你喜欢

转载自blog.csdn.net/yajie_china/article/details/80329704