码迷,mamicode.com
首页 > 其他好文 > 详细

通过尾递归避免栈溢出

时间:2018-02-13 18:57:31      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:block   maximum   log   fun   max   cti   cee   stack   func   

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。

通过尾递归避免栈溢出

标签:block   maximum   log   fun   max   cti   cee   stack   func   

原文地址:https://www.cnblogs.com/mazey/p/8447109.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!