首页 > 其他 > 详细

通过尾递归避免栈溢出

时间:2018-02-13 18:36:27      阅读:200      评论:0      收藏:0      [点我收藏+]

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.cnblogs.com/mazey/p/8447109.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!