zoukankan      html  css  js  c++  java
  • 通过尾递归避免栈溢出

    JavaScript中的递归即函数内调用函数自身,但递归是非常耗内存的,每一次调用都会分配一定的栈空间,达到一定的数量(具体看浏览器)便会溢出报错。

    function recursion (num) {
        if (num === 1) {
            return 1;
        }
        return num + recursion(--num);
    }
    console.log(recursion(5)); // 15
    console.log(recursion(1000)); // 500500
    console.log(recursion(10000000)); // Uncaught RangeError: Maximum call stack size exceeded
    

    对于尾递归来说,由于只存在一个调用帧,所以永远不会发生“栈溢出”错误。

    'use strict';
    function recursion (num, total = 0) {
        if (num === 1) {
            return total + 1;
        }
        return recursion(num - 1, total + num);
    }
    console.log(recursion(5)); // 15
    console.log(recursion(1000)); // 500500
    console.log(recursion(10000000)); // Uncaught RangeError: Maximum call stack size exceeded
    

    实际上还是报错了:D。

    通过尾递归避免栈溢出

  • 相关阅读:
    超赞!不容错过的5款实用网页开发和设计工具
    如何从平面设计转行到UI设计?
    线段树
    RMQ
    Splay
    Treap
    *模板--矩阵
    最小生成树
    hash
    ac自动机
  • 原文地址:https://www.cnblogs.com/mazey/p/8447109.html
Copyright © 2011-2022 走看看