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

    } 
};
相关推荐
木子.李3475 小时前
排序算法总结(C++)
c++·算法·排序算法
闪电麦坤956 小时前
数据结构:递归的种类(Types of Recursion)
数据结构·算法
Gyoku Mint7 小时前
机器学习×第二卷:概念下篇——她不再只是模仿,而是开始决定怎么靠近你
人工智能·python·算法·机器学习·pandas·ai编程·matplotlib
纪元A梦7 小时前
分布式拜占庭容错算法——PBFT算法深度解析
java·分布式·算法
px不是xp8 小时前
山东大学算法设计与分析复习笔记
笔记·算法·贪心算法·动态规划·图搜索算法
枫景Maple8 小时前
LeetCode 2297. 跳跃游戏 VIII(中等)
算法·leetcode
鑫鑫向栄8 小时前
[蓝桥杯]修改数组
数据结构·c++·算法·蓝桥杯·动态规划
鑫鑫向栄8 小时前
[蓝桥杯]带分数
数据结构·c++·算法·职场和发展·蓝桥杯
小wanga9 小时前
【递归、搜索与回溯】专题三 穷举vs暴搜vs回溯vs剪枝
c++·算法·机器学习·剪枝