通过尾递归避免栈溢出
发布日期:2021-05-09 05:14:13 浏览次数:21 分类:博客文章

本文共 693 字,大约阅读时间需要 2 分钟。

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

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

实际上还是报错了:D。

上一篇:ES6通过Set数组去重
下一篇:JavaScript表示x的y次幂

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年04月20日 17时05分26秒