算法--递归--汉诺塔问题

算法--递归--汉诺塔问题_第1张图片
游戏规则:一次只能挪一片;小的只能在大的上面;把所有的从A柱挪到C柱。
递推公式:

  1. 上部 n - 1 个 A 到 B;
  2. 最底下 1 个 A 到 C ;
  3. 上部 n - 1 个 B 到 C;

终止条件:
n = 1 时,A 到 C;

/**
 * @description: 汉诺塔递归问题
 * @author: michael ming
 * @date: 2019/4/7 20:10
 * @modified by:
 */
#include 
using namespace std;
void hanoi(size_t n, string startP, string middleP, string destP, size_t &counts)
{
    if(n == 1)
    {
        cout << startP << " ---> " << destP << endl;
        counts++;
        return;
    }
    else
    {
        hanoi(n-1, startP, destP, middleP, counts);     //n-1个从开始-->中间
        cout << startP << " ---> " << destP << endl;    //最底下那个开始-->目的地
        counts++;
        hanoi(n-1, middleP, startP, destP, counts);     //n-1个从中间-->目的地
    }
}
int main()
{
    cout << "请输入汉诺塔层数:";
    size_t n, steps = 0;   cin >> n;
    hanoi(n,"a","b","c",steps);
    cout << "共走了 " << steps << " 步。" << endl;
    return 0;
}

算法--递归--汉诺塔问题_第2张图片

你可能感兴趣的:(算法,《数据结构与算法之美》学习笔记)