千金纵买相如赋,脉脉此情谁诉。
递归函数
- 编程语言中,函数直接或间接调用函数本身,则该函数称为递归函数。递归函数不能定义为内联函数。
- 递归函数将反复调用其自身,每调用一次就进入新的一层。所以递归函数必须有结束条件。
- 递归的时候,每次调用一个函数,计算机都会为这个函数分配新的空间,这就是说,当被调函数返回的时候,调用函数中的变量依然会保持原先的值,否则也不可能实现反向输出。
斐波那契数列
1 | 0, 1, 1, 2, 3, 5, 8, 13, 21... |
- 个数列从第 3 项开始,每一项都等于前两项之和。
1 | const getList = (num) => { |
递归函数
1 | getId = (data, arr) => { |
递归函数特点
- 每一级函数调用时都有自己的变量,但是函数代码并不会得到复制,如计算 5 的阶乘时每递推一次变量都不同;
- 每次调用都会有一次返回,如计算 5 的阶乘时每递推一次都返回进行下一次;
- 递归函数中,位于递归调用前的语句和各级被调用函数具有相同的执行顺序;
- 递归函数中,位于递归调用后的语句的执行顺序和各个被调用函数的顺序相反;
- 递归函数中必须有终止语句。
递归函数缺点
- 过深的调用会导致栈溢出