递归求汉诺塔

简介:
#include <iostream>

using namespace std;

void Move(int n, char src, char dest)
{
    cout << "dist " << n << " moves from " << src << " to " << dest << endl;
}

void MoveTo(int n, char src, char dest, char tmp)
{
    if (n == 1)
        cout << "disk " << n << " moves from " << src << " to " << dest << endl;
    else
    {
        MoveTo(n-1, src, tmp, dest);
        Move(n, src, dest);
        MoveTo(n-1, tmp, dest, src);
    }
}

int main()
{
    MoveTo(4, 'A', 'B', 'C');

    cin.get();
    return 0;
}

目录
打赏
0
0
0
0
41
分享
相关文章
汉诺塔问题(函数递归)
汉诺塔问题(函数递归)
115 0
|
11月前
|
汉诺塔递归问题,递归思路详解
汉诺塔递归问题,递归思路详解
193 0
利用函数递归求汉诺塔问题
利用函数递归求汉诺塔问题
89 0
汉诺塔 递归问题
汉诺塔 递归问题
138 0
递归问题的实际运用:汉诺塔问题
递归问题的实际运用:汉诺塔问题
145 0
递归问题的实际运用:汉诺塔问题
【递归问题】——汉诺塔
【递归问题】——汉诺塔
260 0
汉诺塔(递归+ 非递归版)
汉诺塔问题(又称为河内塔问题),是一个大家熟知的问题。在A,B,C三根柱子上, 有n个不同大小的圆盘(假设半径分别为1-n吧),一开始他们都叠在我A上(如图所示),你的目标是在最少的合法移动步数内将所有盘子从A塔移动到C塔。 游戏中的每一步规则如下:
299 1
汉诺塔(递归+ 非递归版)
C#中汉诺塔问题的递归解法
百度测试部2015年10月份的面试题之——汉诺塔。 汉诺塔就是将一摞盘子从一个塔转移到另一个塔的游戏,中间有一个用来过度盘子的辅助塔。 百度百科在此。 游戏试玩在此。 用递归的思想解决汉诺塔问题就是分为两种情况: 第一种情况是只有一个盘子的情况,也就是最基本的情况,这种情况下,直接将该盘子从原始塔转移到目标塔即可胜利; 第二种情况是右n个盘子的情况,也就是普遍情况,这种情况下,要将除了最底下的那个盘子以外的(n-1)个盘子从原始塔转移到辅助塔,再把最底下的那个盘子(第n个盘子)从原始塔转移到目标塔,最后将辅助塔的(n-1)个盘子从辅助塔转移到目标塔。
1870 0

热门文章

最新文章