题解 | 汉诺塔

汉诺塔

https://www.nowcoder.com/practice/dd0dc9588fd94127b594b2adc3ebb346

// 我不行了 ,瞎写的代码我自己都没看懂,居然就这么过了。。。。。。
// 将每次k大坨从src位置移动到dest位置,中间经过mid的过程分为3个步骤
// 第一步,将k-1大坨从src移动到mid
// 第二步,将最底下那个垫片移动到dest
// 第三步,将k-1大坨从mid移动到dest

// 注意递归的含义是将to_move个垫片进行移动,如果数量为0,那么自然就应该终止递归了
// recursion是移动一大坨这个动作
// cout << src <<' '<<dest<<'\n';是移动一小片
// 再次recursion又把一大坨移动到了dest

#include <iostream>
using namespace std;


void recursion(int n,int to_move,char src,char dest,char mid)
{
    if (to_move == 0)
        return ;
    
    // 首先理解你的函数的用意
    // 这里的目标是要把一部分从src搬到mid
    // 把最下面一个垫片从src搬到dest
    // 然后再把mid上的搬回到dest上
    recursion(n,to_move-1,src,mid,dest);
    cout<<src<<' '<<dest<<'\n';
    recursion(n,to_move-1,mid,dest,src);
}

int main() {
    int n;
    cin>>n;
    recursion(n,n,'A','C','B');
    return 0;
}

全部评论
这么牛
1 回复 分享
发布于 12-16 21:19 山东
递归思路清奇
1 回复 分享
发布于 12-14 03:02 山东

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务