回溯和递归的区别(简述)
回溯和递归的区别(简述)
- 前言
- 递归和回溯
- 最后
前言
最近在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.电话号码的字母组合,官方题解用的是哈希表和回溯,后续会更新关于我学习哈希表的内容,整理学到的知识,加油奥利干!
(有不恰当的地方,望各路大佬可以指出来)
回溯和递归的区别(简述)相关推荐
- [回溯法] 回溯法介绍-回溯与递归的区别
原文链接:https://www.yuque.com/cppdev/algo/loeps2 [回溯法] 有一类问题,我们不知道它明确的计算法则.而是先进行试探,试探到最终状况,发现不满足问题的要求,则 ...
- 数据结构与算法学习④(哈夫曼树 图 分治回溯和递归)
数据结构与算法学习④(哈夫曼树 图 回溯和递归 数据结构与算法学习④ 1.哈夫曼树 1.1.相关概念 1.2.哈夫曼树的构建 1.3.哈夫曼编码 1.4.面试题 2.图 2.1.图的相关概念 2.2. ...
- DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台、刷题集合、问题为导向的十大类刷题算法(数组和字符串、栈和队列、二叉树、堆实现、图、哈希表、排序和搜索、动态规划/回溯法/递归/贪心/分治)总
DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台.刷题集合.问题为导向的十大类刷题算法(数组和字符串.栈和队列.二叉树.堆实现.图.哈希表.排序和搜索.动态规划/回溯法/递归/贪心/分治)总 ...
- DFS回溯-函数递归-xiaoz triangles
题目:小z 的三角形 ★实验任务 三角形的第1 行有n 个由"+"和"-"组成的符号,以后每行符 号比上行少1 个,2 个同号下面是"+", ...
- 递归--基于回溯和递归的八皇后问题解法
八皇后问题是在8*8的棋盘上放置8枚皇后,使得棋盘中每个纵向.横向.左上至右下斜向.右上至左下斜向均只有一枚皇后.八皇后的一个可行解如图所示: ...
- 在计算机中存储器是由内存和外存的区别,简述计算机的内存和外存有何区别与特点?内存是由哪几部分组成?有何特点?...
简述计算机的内存和外存有何区别与特点?内存是由哪几部分组成?有何特点? 答案:4 信息版本:手机版 解决时间 2019-10-06 02:44 已解决 2019-10-05 13:10 简述计算机的 ...
- 条件自信息跟互信息区别简述
简述 (PS部分,可以是拓展部分,可不看) 条件自信息: 条件自信息,本质上还是自信息.定义上,明确指出,是在已知事件 y = b j y = b_j y=bj发生的条件下, x = a i x = ...
- 递推与递归 (区别)
递推与递归 本文中部分内容转自他人博客,作者相关信息以及博客地址在文末. 概念 递归:从已知问题的结果出发,用迭代表达式逐步推算出问题的开始的条件,即顺推法的逆过程,称为递归. 递归的定义:在一个函数 ...
- 一次看懂迭代与递归的区别
文章目录 前言 一.介绍概念 二.总结 前言 偶然看到了迭代与递归,抱着学习的心态去百度了各种答案,什么函数关系什么代码看的是一头雾水,于是在半个小时的努力下终于搞懂了递归与迭代的区别,在这里分享给各 ...
最新文章
- SAP MM 公司间STO的交货单里的移动类型的确定
- A potentially dangerous Request.Form value was detected from the client问题处理
- 【2019icpc南京站网络赛 - F】Greedy Sequence(思维,贪心构造,STLset)
- BP神经网络算法学习
- sparkSession常见参数设置
- 到底是谁发明了物联网?
- Silverlight初级教程-概述
- 如何在IOS平台上使用js直接调用OC方法
- iPhone开发:类似iChat的聊天泡泡
- 更新至2021各省份上传服务器地址(航信、百旺、税务UK)
- have datatype/md5sum 相关的错误 IndentationError: unexpected indent
- ios MultipeerConnectivity蓝牙通讯
- 叹20年奶茶江湖纷争,入局奶茶行业仍有机会
- 太原理工大学数据科学与计算机学院,谢珺-太原理工大学信息与计算机学院
- Kubernetes实战(二十)-kubernetes二进制文件方式部署集群(非安全)(下)
- 葛洛夫、盖兹、施振荣、张忠谋、Michael Dell的30岁
- 美团点评王兴:有爱、有钱、有耐心丨Xtecher 观察
- 我今年50岁了,还在干前端
- 设备产线运维合集丨图扑数字孪生流水线,提升产品装配自动化效率
- 与苹果斗争,可以不优雅,但要有用
热门文章
- 有的时候入门只是一瞬间
- 如何在 SAP 电商云 Spartacus UI 里访问 CMS Component data 数据
- Rxjs 的一些学习笔记
- TypeScript 的类型推导 Type Inference
- 查看某个github commit属于哪一个github pull request
- 如何通过调试找到自己需要的ABAP增强
- SAP Cloud Platform Identity Authentication service
- SAP Hybris Commerce installer目录下的build.gradle
- SAP UI5和angular里的常量定义
- 微软的ppt现在可以直接导出成可以播放的mp4了,非常方便