===》点我返回目录《===
在进行计算的时候,经常会用到递推的概念。递推是一种用若干步可重复的简运算来描述复杂问题的方法。通常是通过计算前面的一些项来得出序列中的当前项的值。
程序调用自身称为Recursive递归。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
比如对斐波那契数列,我们看这个函数的定义,fib(n)的返回值是fib(n-1)+fib(n-2)。这个概念上很清晰,但是似乎陷入了死循环中无法出来了,所以一定要有一个出口,当n为1和2的时候,我们要给他规定一个值。这就是递归的写法。
你心里肯定会问:那么程序究竟是怎么执行这个递归的呢?自己调用自己总是感觉奇奇怪怪的。
我们要再次打入计算机内部,来看一个普通函数是如何执行的。
一个函数,定义的时候,有一个名字,有输入的参数,有返回的值,内部还要用到很多临时的变量和指令。
计算机在调用一个函数的时候,会在一个叫做“栈”的内存空间为这一次调用划出一片空间来,存放本次函数调用用到的参数及内部变量。假如在执