JavaScript 递归

Posted 肥肥鱼与鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript 递归相关的知识,希望对你有一定的参考价值。

递归是一种解决问题的方法,它解决问题的各个小部分,直到解决最初的大问题。通常涉及
函数调用自身。 
能够像下面这样直接调用自身的方法或函数,是递归函数: 
var recursiveFunction = function(someParam){ 
  recursiveFunction(someParam); 
}; 
能够像下面这样间接调用自身的函数,也是递归函数: 
var recursiveFunction1 = function(someParam){ 
  recursiveFunction2(someParam); 
}; 
var recursiveFunction2 = function(someParam){ 
  recursiveFunction1(someParam); 
}; 
假设现在必须要执行recursiveFunction,结果是什么?单单就上述情况而言,它会一直
执行下去。因此,每个递归函数都必须要有边界条件,即一个不再递归调用的条件(停止点) ,
以防止无限递归。 

javascript 调用栈大小的限制 
如果忘记加上用以停止函数递归调用的边界条件, 会发生什么呢?递归并不会无限地执行下
去;浏览器会抛出错误,也就是所谓的栈溢出错误(stack overflow error) 。 
每个浏览器都有自己的上限,可用以下代码测试: 
var i = 0; 
 
function recursiveFn () { 
    i++; 
    recursiveFn(); 
} 
 
try { 
    recursiveFn(); 
} catch (ex) { 
    alert(i =  + i +  error:  + ex); 
} 
在Chrome v37中,这个函数执行了20 955次,而后浏览器抛出错误RangeError: Maximum 
call stack size exceeded(超限错误:超过最大调用栈大小) 。Firefox v27中,函数执行了
343 429次,然后浏览器抛出错误 InternalError: too much recursion(内部错误:递归
次数过多) 。 

 

以上是关于JavaScript 递归的主要内容,如果未能解决你的问题,请参考以下文章

48个值得掌握的JavaScript代码片段(上)

精心收集的 48 个 JavaScript 代码片段,仅需 30 秒就可理解!(转载)

VSCode自定义代码片段12——JavaScript的Promise对象

VSCode自定义代码片段12——JavaScript的Promise对象

30秒就能看懂的JavaScript 代码片段

常用Javascript代码片段集锦