回溯和递归的区别(简述)

  • 前言
    • 递归和回溯
  • 最后

前言

最近在LeetCode上刷题刷到了递归实现的回溯算法,产生疑惑:这两者有什么区别呢?在网络上阅读了一些相关的文章,总结了一些:


递归和回溯

递归:递归(recursion)是一种算法,在函数中调用自身的方法称为递归。

如果我们要构造某一个状态A,需要得到它的子状态B,构造子状态B需要B的子状态C,直到最深层的子状态N(最小子状态)被构造。

假设子状态C为最小子状态(出口),C构造成功后返回并完成子状态B的构造,B构造成功后返回并完成状态A的构造。

递归经典例子(计算阶乘):

factorial(int n) {int m;if (n <= 1)m = 1;else m = n * factorial(n - 1);return m;
}

回溯:回溯(backtrack)则是一种算法思想。

我们取第一种解释:上溯,向上推导。一个问题推导出多种可能,则选中其中一种可能继续推导。如果一条路到达尽头,则回到起点,选择另外的路径继续推导,直到所有可能被推导完毕。
(另外的路径:含有与之前推导过的路径 不同的可能 的路径)

知道深度优先搜索的同学,回溯就好像每结束深搜中的一条路线,都会返回一个这条路线上的元素所组成的序列,当所有序列被 一 一 列出,回溯结束。

算法上回溯常被用递归来实现,我把它理解成“子状态不唯一的递归”(或者是“多分支的递归”)


回溯有剪枝的功能:每次剪掉 (输出) 符合条件的树枝,当回溯结束时(若问题有序:当遇到不符合条件的树枝时停下,一种搜索过程的优化)我们就获得了所有符合条件的树枝 (答案)。
( 剪掉的部分是末端顶点到离它最近的一个有分叉的点)
回溯经典例子(8皇后问题,略)

最后

参考了CSDN博主 @繁拾简忆 的博客《回溯和递归区别》
博文原链@繁拾简忆《回溯和递归区别》

前言描述的题是力扣的 17.电话号码的字母组合,官方题解用的是哈希表和回溯,后续会更新关于我学习哈希表的内容,整理学到的知识,加油奥利干!
(有不恰当的地方,望各路大佬可以指出来)

回溯和递归的区别(简述)相关推荐

  1. [回溯法] 回溯法介绍-回溯与递归的区别

    原文链接:https://www.yuque.com/cppdev/algo/loeps2 [回溯法] 有一类问题,我们不知道它明确的计算法则.而是先进行试探,试探到最终状况,发现不满足问题的要求,则 ...

  2. 数据结构与算法学习④(哈夫曼树 图 分治回溯和递归)

    数据结构与算法学习④(哈夫曼树 图 回溯和递归 数据结构与算法学习④ 1.哈夫曼树 1.1.相关概念 1.2.哈夫曼树的构建 1.3.哈夫曼编码 1.4.面试题 2.图 2.1.图的相关概念 2.2. ...

  3. DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台、刷题集合、问题为导向的十大类刷题算法(数组和字符串、栈和队列、二叉树、堆实现、图、哈希表、排序和搜索、动态规划/回溯法/递归/贪心/分治)总

    DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台.刷题集合.问题为导向的十大类刷题算法(数组和字符串.栈和队列.二叉树.堆实现.图.哈希表.排序和搜索.动态规划/回溯法/递归/贪心/分治)总 ...

  4. DFS回溯-函数递归-xiaoz triangles

    题目:小z 的三角形 ★实验任务 三角形的第1 行有n 个由"+"和"-"组成的符号,以后每行符 号比上行少1 个,2 个同号下面是"+", ...

  5. 递归--基于回溯和递归的八皇后问题解法

    八皇后问题是在8*8的棋盘上放置8枚皇后,使得棋盘中每个纵向.横向.左上至右下斜向.右上至左下斜向均只有一枚皇后.八皇后的一个可行解如图所示:                             ...

  6. 在计算机中存储器是由内存和外存的区别,简述计算机的内存和外存有何区别与特点?内存是由哪几部分组成?有何特点?...

    简述计算机的内存和外存有何区别与特点?内存是由哪几部分组成?有何特点? 答案:4  信息版本:手机版 解决时间 2019-10-06 02:44 已解决 2019-10-05 13:10 简述计算机的 ...

  7. 条件自信息跟互信息区别简述

    简述 (PS部分,可以是拓展部分,可不看) 条件自信息: 条件自信息,本质上还是自信息.定义上,明确指出,是在已知事件 y = b j y = b_j y=bj​发生的条件下, x = a i x = ...

  8. 递推与递归 (区别)

    递推与递归 本文中部分内容转自他人博客,作者相关信息以及博客地址在文末. 概念 递归:从已知问题的结果出发,用迭代表达式逐步推算出问题的开始的条件,即顺推法的逆过程,称为递归. 递归的定义:在一个函数 ...

  9. 一次看懂迭代与递归的区别

    文章目录 前言 一.介绍概念 二.总结 前言 偶然看到了迭代与递归,抱着学习的心态去百度了各种答案,什么函数关系什么代码看的是一头雾水,于是在半个小时的努力下终于搞懂了递归与迭代的区别,在这里分享给各 ...

最新文章

  1. SAP MM 公司间STO的交货单里的移动类型的确定
  2. A potentially dangerous Request.Form value was detected from the client问题处理
  3. 【2019icpc南京站网络赛 - F】Greedy Sequence(思维,贪心构造,STLset)
  4. BP神经网络算法学习
  5. sparkSession常见参数设置
  6. 到底是谁发明了物联网?
  7. Silverlight初级教程-概述
  8. 如何在IOS平台上使用js直接调用OC方法
  9. iPhone开发:类似iChat的聊天泡泡
  10. 更新至2021各省份上传服务器地址(航信、百旺、税务UK)
  11. have datatype/md5sum 相关的错误 IndentationError: unexpected indent
  12. ios MultipeerConnectivity蓝牙通讯
  13. 叹20年奶茶江湖纷争,入局奶茶行业仍有机会
  14. 太原理工大学数据科学与计算机学院,谢珺-太原理工大学信息与计算机学院
  15. Kubernetes实战(二十)-kubernetes二进制文件方式部署集群(非安全)(下)
  16. 葛洛夫、盖兹、施振荣、张忠谋、Michael Dell的30岁
  17. 美团点评王兴:有爱、有钱、有耐心丨Xtecher 观察
  18. 我今年50岁了,还在干前端
  19. 设备产线运维合集丨图扑数字孪生流水线,提升产品装配自动化效率
  20. 与苹果斗争,可以不优雅,但要有用

热门文章

  1. 有的时候入门只是一瞬间
  2. 如何在 SAP 电商云 Spartacus UI 里访问 CMS Component data 数据
  3. Rxjs 的一些学习笔记
  4. TypeScript 的类型推导 Type Inference
  5. 查看某个github commit属于哪一个github pull request
  6. 如何通过调试找到自己需要的ABAP增强
  7. SAP Cloud Platform Identity Authentication service
  8. SAP Hybris Commerce installer目录下的build.gradle
  9. SAP UI5和angular里的常量定义
  10. 微软的ppt现在可以直接导出成可以播放的mp4了,非常方便