C语言小细节(2)——对迭代与递归的理解

递归

定义:函数自己调用自己来实现循环
理解:递归实际上不断地深层调用函数,直到函数有返回才会逐层的返回,递归是用栈机制实现的,每深入一层,都要占去一块栈数据区域,因此,递归涉及到运行时的堆栈开销(参数必须压入堆栈保存,直到该层函数调用返回为止),所以有可能导致堆栈溢出的错误。例如:if else 调用自己,并在合适时机退出

迭代

定义:利用变量的原值推出新值称为迭代,或着说迭代是函数内某段代码实现循环
理解: 迭代大部分时候需要人为的对问题进行剖析,分析问题的规律所在,将问题转变为一次次的迭代来逼近答案。迭代不像递归那样对堆栈有一定的要求,另外一旦问题剖析完毕,就可以很容易的通过循环加以实现。例如:for,while循环

区别与关系

关系:所有的迭代可以转换为递归,但递归不一定可以转换成迭代。
C语言小细节(2)——对迭代与递归的理解