递归和迭代在时间复杂度方面是等价的(在不考虑函数调用开销和函数调用产生的堆栈开销)

但实际上递归确实效率比迭代低

采用递归算法需要的前提条件是,当且仅当一个存在预期的收敛时,才可采用递归算法,否则,就不能使用递归算法。

递归其实是方便了程序员难为了机器,递归可以通过数学公式很方便的转换为程序。其优点就是易理解,容易编程。但递归是用栈机制实现的,每深入一层,都要占去一块栈数据区域,对嵌套层数深的一些算法,递归会力不从心,空间上会以内存崩溃而告终,而且递归也带来了大量的函数调用,这也有许多额外的时间开销。所以在深度大时,它的时空性就不好了。而迭代虽然效率高,运行时间只因循环次数增加而增加,没什么额外开销,空间上也没有什么增加,但缺点就是不容易理解,编写复杂问题时困难。

递归:函数自身调用自身迭代:把输出的结果作为输入递归和迭代在时间复杂度方面是等价的(在不考虑函数调用开销和函数调用产生的堆栈开销)但实际上递归确实效率比迭代低采用递归算法需要的前提条件是,当且仅当一个存在预期的收敛时,才可采用递归算法,否则,就不能使用递归算法。递归其实是方便了程序员难为了机器,递归可以通过数学公式很方便的转换为程序。其优点就是易理解,容易编程。但递归是用栈机制实现的,每深入一层,都要占去一块栈数据区域,对嵌套层数深的一些算法,递归会力不从心,空间上会以内存崩溃而告终,而且递归也带
递归 迭代 区别 递归 (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依次 计算 每个数的乘积,最后返回结果。可以看到,这个函数没有使用 递归 ,而是使用了循环来实现重复执行的过程。 总体来说, 递归 迭代 都可以用来实现循环,但是它们的实现方式不同。 递归 需要调用自身,会占用更多的内存空间,而 迭代 使用循环,不会占用太多的内存空间。在实际编程中,需要根据具体情况选择使用哪种方法。