【算法】递归总结:循环与递归的区别?递归与深搜的关系?

简介: 【算法】递归总结:循环与递归的区别?递归与深搜的关系?

递归算法总结:搞清楚递归与循环、深搜之间的联系。

1.递归 与 循环(迭代)?

所谓 递归,就是函数自己调用自己

所谓 循环,就是做重复代码处理

在某一层面上,可以认为递归就是循环的另一种写法,循环也是递归的另一种写法。

两者都有个关键的共同点重复子问题

下面我以遍历vector举例:现在有一个数组,请分别用循环和递归的两种不同方式去对他们进行遍历。

#include <iostream>
#include<vector>
using namespace std;
void dfs(vector<int>& v, int i)
{
  if (i == v.size()) return;
  cout << v[i++] << " ";
  dfs(v, i);
}
int main()
{
  vector<int> v = { 1,2,3,4,5,6,7,8,9 };
  //用循环的方式
  for (int i = 0; i < v.size(); i++)
  {
    cout << v[i] << " ";
  }
  cout << endl;
  //用递归的方式
  dfs(v,0);
  cout << endl;
  return 0;
}

结论:我们可以看到,循环和递归在某一层面上是等价的,只不过写法不同而已。

那像二叉树的前序中序后序遍历用循环怎么进行处理呢?因为每个节点在用完之后,后面还可能会用到,所以想要用循环写出来,得借用栈这个数据结构即可。不过写起来很麻烦。

具体参见:【数据结构】树、二叉树与堆(长期维护)

结论:虽然循环与递归可以相互转换,但是有些题适合用递归写,有些题适合用循环写。比如上面我举的vector遍历的例子,一般这种单层面递归就用循环比较合适,而像多叉树遍历这种多方面递归,就适合用递归去写。

2.递归 与 深搜?

深度优先搜索,比如将树按照左、右、中的树顺序进行遍历。

而具体的代码实现,用递归去写是比较方便的。

说白了,递归的展开图与深度优先遍历高度相似。


EOF

相关文章
|
11天前
|
算法 搜索推荐 Shell
数据结构与算法学习十二:希尔排序、快速排序(递归、好理解)、归并排序(递归、难理解)
这篇文章介绍了希尔排序、快速排序和归并排序三种排序算法的基本概念、实现思路、代码实现及其测试结果。
13 1
|
4月前
|
存储 算法 程序员
数据结构与算法===递归
数据结构与算法===递归
|
11天前
|
算法 定位技术
数据结构与算法学习九:学习递归。递归的经典实例:打印问题、阶乘问题、递归-迷宫问题、八皇后问题
本文详细介绍了递归的概念、重要规则、形式,并展示了递归在解决打印问题、阶乘问题、迷宫问题和八皇后问题等经典实例中的应用。
21 0
|
2月前
|
机器学习/深度学习 人工智能 算法
【语音识别算法】深度学习语音识别算法与传统语音识别算法的区别、对比及联系
深度学习语音识别算法与传统语音识别算法在理论基础、实现方式、性能表现等方面存在显著区别,同时也有一些联系。下面将从几个方面详细比较这两种方法,并给出应用实例和代码示例
36 4
|
2月前
|
算法
【算法】递归、搜索与回溯——汉诺塔
【算法】递归、搜索与回溯——汉诺塔
|
2月前
|
机器学习/深度学习 算法 数据中心
【机器学习】面试问答:PCA算法介绍?PCA算法过程?PCA为什么要中心化处理?PCA为什么要做正交变化?PCA与线性判别分析LDA降维的区别?
本文介绍了主成分分析(PCA)算法,包括PCA的基本概念、算法过程、中心化处理的必要性、正交变换的目的,以及PCA与线性判别分析(LDA)在降维上的区别。
72 4
|
3月前
|
人工智能 算法 大数据
算法金 | 推导式、生成器、向量化、map、filter、reduce、itertools,再见 for 循环
这篇内容介绍了编程中避免使用 for 循环的一些方法,特别是针对 Python 语言。它强调了 for 循环在处理大数据或复杂逻辑时可能导致的性能、可读性和复杂度问题。
46 6
算法金 | 推导式、生成器、向量化、map、filter、reduce、itertools,再见 for 循环
|
2月前
|
机器学习/深度学习 运维 算法
监督算法和无监督算法之间的区别
【8月更文挑战第23天】
56 0
|
3月前
|
算法 测试技术 Python
python中算法无限循环(Infinite Loops)
【7月更文挑战第18天】
97 4
|
2月前
|
算法
【算法】递归、搜索与回溯——简介
【算法】递归、搜索与回溯——简介

热门文章

最新文章