1.汉诺塔问题

C++力扣 汉诺塔

cpp 复制代码
class Solution {
public:
    void hanota(vector<int>& a, vector<int>& b, vector<int>& c) 
    {
        dfs(a,b,c,a.size());
    }
    
    void dfs(vector<int>& a, vector<int>& b, vector<int>& c,int n)
    {
        if(n==1)
        {
            c.push_back(a.back());
            a.pop_back();
            return;
        }
        dfs(a,c,b,n-1);
        c.push_back(a.back());
        a.pop_back();
        dfs(b,a,c,n-1);

    } 
};

1.题目解释

(1) 每次只能移动一个盘子;

(2) 盘子只能从柱子顶端滑出移到下一根柱子;

(3) 盘子只能叠在比它大的盘子上。

初始的盘子样子!!

2.算法原理

重点在why

为什么可以用递归??

大问题-》相同类型的子问题

小问题-》相同类型的子问题

3.如何编写递归代码?

依次循环~~~~~~~~

递归的出口

4.代码实现

cpp 复制代码
class Solution {
public:
    void hanota(vector<int>& a, vector<int>& b, vector<int>& c) 
    {
        dfs(a,b,c,a.size());
    }
    
    void dfs(vector<int>& a, vector<int>& b, vector<int>& c,int n)
    {
        if(n==1)
        {
            c.push_back(a.back());
            a.pop_back();
            return;
        }
        dfs(a,c,b,n-1);
        c.push_back(a.back());
        a.pop_back();
        dfs(b,a,c,n-1);

    } 
};
相关推荐
柏木乃一1 小时前
多态以及多态底层的实现原理
数据结构·c++·算法·stl·多态·虚函数表
Aqua Cheng.2 小时前
25.4.22华为--算法真题整理(2025年4月22日)
java·算法·leetcode·华为·面试
东阳马生架构2 小时前
Sentinel源码—9.限流算法的实现对比二
算法·sentinel
东阳马生架构2 小时前
Sentinel源码—9.限流算法的实现对比一
算法·sentinel
its_a_win2 小时前
Codeforces Round 998 (Div. 3) ABCD
算法
结冰架构2 小时前
量子金融工程:蒙特卡洛算法误差压缩至0.3%
人工智能·算法·ai·金融·量子计算
良木林2 小时前
240423 leetcode exercises
算法·leetcode
潦草通信狗3 小时前
Joint communication and state sensing under logarithmic loss
人工智能·深度学习·算法·机器学习·信号处理·信息论·通信感知一体化
AI大模型顾潇4 小时前
[特殊字符] 大模型对话风格微调项目实战——模型篇 [特殊字符]✨
人工智能·算法·机器学习·数据挖掘·大模型·微调·ai大模型
ตาก柒Tak4 小时前
C语言五子棋项目
java·c语言·算法