美文网首页前端开发笔记让前端飞
通过尾递归避免栈溢出

通过尾递归避免栈溢出

作者: 后除 | 来源:发表于2018-02-12 17:13 被阅读31次

    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。

    相关文章

      网友评论

      本文标题:通过尾递归避免栈溢出

      本文链接:https://www.haomeiwen.com/subject/pyfdtftx.html