递归和迭代在时间复杂度方面是等价的(在不考虑函数调用开销和函数调用产生的堆栈开销)
但实际上递归确实效率比迭代低
采用递归算法需要的前提条件是,当且仅当一个存在预期的收敛时,才可采用递归算法,否则,就不能使用递归算法。
递归其实是方便了程序员难为了机器,递归可以通过数学公式很方便的转换为程序。其优点就是易理解,容易编程。但递归是用栈机制实现的,每深入一层,都要占去一块栈数据区域,对嵌套层数深的一些算法,递归会力不从心,空间上会以内存崩溃而告终,而且递归也带来了大量的函数调用,这也有许多额外的时间开销。所以在深度大时,它的时空性就不好了。而迭代虽然效率高,运行时间只因循环次数增加而增加,没什么额外开销,空间上也没有什么增加,但缺点就是不容易理解,编写复杂问题时困难。
递归:函数自身调用自身迭代:把输出的结果作为输入递归和迭代在时间复杂度方面是等价的(在不考虑函数调用开销和函数调用产生的堆栈开销)但实际上递归确实效率比迭代低采用递归算法需要的前提条件是,当且仅当一个存在预期的收敛时,才可采用递归算法,否则,就不能使用递归算法。递归其实是方便了程序员难为了机器,递归可以通过数学公式很方便的转换为程序。其优点就是易理解,容易编程。但递归是用栈机制实现的,每深入一层,都要占去一块栈数据区域,对嵌套层数深的一些算法,递归会力不从心,空间上会以内存崩溃而告终,而且递归也带
递归
与
迭代
的
区别
递归
(recursion):
递归
常被用来描述以自相似方法重复事物的过程,在数学和
计算
机科学中,指的是在函数定义中使用函数自身的方法。(A调用A)
迭代
(iteration):重复反馈过程的活动,每一次
迭代
的结果会作为下一次
迭代
的初始值。(A重复调用B)
递归
是一个树结构,从字面可以其理解为重复“递推”和“回归”的过程,当“递推”到达底部时就会开始“回归”,其过程相当于树的深度优先遍历。
迭代
是一个环结构,从初始状态开始,每次
迭代
都遍历这个环,并更新状态,多次
迭代
直到到达结束状态。
偶然看到了
迭代
与
递归
,抱着学习的心态去百度了各种答案,什么函数关系什么代码看的是一头雾水,于是在半个小时的努力下终于搞懂了
递归
与
迭代
的
区别
,在这里分享给各位我自己是怎么样理解这俩的
区别
的,可能有些土方法,反正我记住了
提示:以下是本篇文章正文内容,下面案例可供参考
一、首先介绍概念
迭代
:从初始状态开始,每次
迭代
都遍历这个环,并更新状态,多次
迭代
直到到达结束状态。
递归
:想象成一个树结构,从字面可以其理解为重复“递推”和“回归”的
递归
和
迭代
都是实现循环的方法,但是它们的实现方式不同。下面以C语言为例进行详细说明。
递归
是指在函数内部调用自身的过程。
递归
函数一般包括两部分:基线条件和
递归
条件。基线条件是指
递归
结束的条件,
递归
条件是指
递归
继续执行的条件。下面是一个
计算
阶乘的
递归
函数的例子:
int factorial(int n) {
if(n == 0) {
return 1; // 基线条件
} else {
return n * factorial(n-1); //
递归
条件
这个函数首先判断n是否为0,如果为0就返回1,否则返回n乘以factorial(n-1)的结果。可以看到,这个函数内部调用了自身,直到满足基线条件才停止
递归
。
迭代
是指通过循环来实现重复执行某段代码的过程。
迭代
通常使用for、while或do-while循环来实现。下面是一个
计算
阶乘的
迭代
函数的例子:
int factorial(int n) {
int result = 1;
for(int i=1; i<=n; i++) {
result *= i;
return result;
这个函数使用for循环,从1到n依次
计算
每个数的乘积,最后返回结果。可以看到,这个函数没有使用
递归
,而是使用了循环来实现重复执行的过程。
总体来说,
递归
和
迭代
都可以用来实现循环,但是它们的实现方式不同。
递归
需要调用自身,会占用更多的内存空间,而
迭代
使用循环,不会占用太多的内存空间。在实际编程中,需要根据具体情况选择使用哪种方法。