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

    } 
};
相关推荐
电子_咸鱼4 小时前
LeetCode——Hot 100【电话号码的字母组合】
数据结构·算法·leetcode·链表·职场和发展·贪心算法·深度优先
仰泳的熊猫4 小时前
LeetCode:785. 判断二分图
数据结构·c++·算法·leetcode
rit84324994 小时前
基于MATLAB实现基于距离的离群点检测算法
人工智能·算法·matlab
my rainy days7 小时前
C++:友元
开发语言·c++·算法
haoly19897 小时前
数据结构和算法篇-归并排序的两个视角-迭代和递归
数据结构·算法·归并排序
微笑尅乐7 小时前
中点为根——力扣108.讲有序数组转换为二叉搜索树
算法·leetcode·职场和发展
im_AMBER8 小时前
算法笔记 05
笔记·算法·哈希算法
夏鹏今天学习了吗8 小时前
【LeetCode热题100(46/100)】从前序与中序遍历序列构造二叉树
算法·leetcode·职场和发展
吃着火锅x唱着歌8 小时前
LeetCode 2389.和有限的最长子序列
算法·leetcode·职场和发展
嶔某8 小时前
二叉树的前中后序遍历(迭代)
算法