zoukankan      html  css  js  c++  java
  • 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(内部错误:递归
    次数过多) 。 
  • 相关阅读:
    java 可变參数列表
    Java -Xms -Xmx -Xss -XX:MaxNewSize -XX:MaxPermSize含义记录
    hdu 4939
    什么是堆和栈,它们在哪儿?
    PPAPI插件与浏览器的通信
    Java&Xml教程(十一)JAXB实现XML与Java对象转换
    Heavy Transportation
    Python学习笔记-小记
    C/C++知识要点5——智能指针原理及自己定义实现
    小米2S电池电量用尽充电无法开机解决方法
  • 原文地址:https://www.cnblogs.com/menu/p/7058114.html
Copyright © 2011-2022 走看看