我的回答
递归的栈深度会很深, 栈会一直存在, 直到到最深层, 才会出栈, 如果递归深度很深可能会产生爆栈
迭代不会产生爆栈问题
参考回答
定义
递归(recursion): 递归常被用来描述以相似方法重复事物的过程,在数学和计算机科学中,指的是在函数定义中使用函数自身的方法。(自己调用自己)
迭代(iteration):迭代是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果。每一次对过程的重复被称为一次”迭代”,而每一次迭代
得到的结果会被用来作为下一次迭代的初始值(a 重复调用 b)
简单来说,递归是重复调用函数自身实现循环。迭代是函数内某段代码实现循环,而迭代与普通循环的区别是:循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。
递归从字面上理解为重复递推和回归的过程
- 递推: 层层推进,分解问题
- 回归: 层层回归,返回较大问题的解
递归实际上不断地深层调用函数,直到函数有返回才会逐层的返回,递归是用栈机制实现的,每深入一层,都要占去一块栈数据区域,因此,递归涉及到运行时的堆栈开销(参数必须压入堆栈保存,直到该层函数调用返回为止),所以有可能导致堆栈溢出的错误;但是递归编程所体现的思想正是人们追求简洁、将问题交给计算机,以及将大问题分解为相同小问题从而解决大问题的动机
迭代大部分时候需要人为的对问题进行剖析,分析问题的规律所在,将问题转变为一次次的迭代来逼近答案。迭代不想递归那样对堆栈有一定的要求,另外一旦问题剖析完毕,就可以很容易通过循环加以实现。迭代的效率高,但却不太容易理解,当遇到数据结构的设计的时候,比如图表、二叉树、网格等问题时,使用就比较困难,而是用递归就能省掉人工思考解法的过程,只需要不断地将问题分解直到返回就可以啦
理论上递归和迭代时间复杂度方面是一样的,但是实际应用中(函数调用和函数调用堆栈的开销)递归比迭代效率要低
优缺点
递归的优点 大问题转化为小问题 可以减少代码量,同时代码精简,可读性好,缺点就是 递归调用浪费了空间,而且递归太深容易造成堆栈的溢出
迭代的好处 就是代码运行效率好 因为时间只因循环次数增加而增加,而且没有额外的空间开销,缺点就是代码不如递归简洁