通过尾递归避免栈溢出
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
通过尾递归避免栈溢出相关推荐
- python递归和循环的区别_递归与伪递归区别,Python 实现递归与尾递归
递归函数在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函 数.(1) 递归就是在过程或函数里调用自身.(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出 ...
- Python 2.4 递归函数
递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用本身,这个函数就是递归函数. 举个例子:计算阶乘n!=1*2*3*4*5*...*n,用函数fact(n)表示,可以看出 fact(n)= ...
- python所有函数用法_python函数用法总结
空函数 如果想定义一个什么事也不做的空函数,可以用pass语句: def nop(): pass pass语句什么都不做,那有什么用?实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码 ...
- Python编程核心内容 ---- Function(函数)
什么"大事"呢?下面将要介绍Python编程的核心内容之一--函数. 对于Python编程,函数的重要性不言而喻.重要的事情讲三遍:函数实在是太重要,太关键了. 引入函数 之前,我 ...
- python递归函数特点_python中对递归函数的理解
在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 举个例子,我们来计算阶乘n! = 1 * 2 * 3 * ... * n,用函数fact(n)表示,可以看出: f ...
- Python学习笔记:函数
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python入门学习---第三天
函数 函数 基本上所有的高级语言都支持函数,Python也不例外.Python不但能非常灵活地定义函数,而且本身内置了很多有用的函数,可以直接调用. 抽象是数学中非常常见的概念.写计算机程序也是一样, ...
- Python3学习笔记(2)——递归函数
如果一个函数在内部调用自身本身,这个函数就是递归函数. 递归函数的优点是定义简单,逻辑清晰.理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰. 使用递归函数需要注意防止栈溢出.在计 ...
- python基础——递归函数
python基础--递归函数 递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数.举个例子,我们来计算阶乘n! = 1 x 2 x 3 x ... x n,用 ...
最新文章
- line_profile逐行代码分析
- php300类库,扩展类库 · PHP300FrameWork · 看云
- torchvision 笔记:transforms.Normalize()
- redis pub/sub 聊天
- Go语言 gRPC 实践(一)
- 如何掌握Java内存(并保存程序)
- AcWing 830. 单调栈
- 心情随笔之纸包子假新闻 [2007年7月25日]
- -bash:ls:command not found,执行命令总是报找不到
- IDEA 代码格式化插件Save Actions示范
- javaweb springboot餐厅点餐系统源码
- ffmpeg ffprobe查看视频文件编码格式
- c语言寻找丑数,C语言程序设计100例之(14):丑数
- ROS:launch规范及用法
- phyton方面相关书籍
- 孙氏太极拳--无极桩
- Notepad++安装HexEditor插件
- open wrt 跟换主题_分享个openwrt主题 可以简单自定义的 主题
- 蚂蚁金服面试题和答案
- Python进行表格拆分
热门文章
- HTML5 ArrayBufferView之DataView
- 新建指令避开 Avalon 的 ms-duplex 的问题
- Xcode编译Undefined symbols for architecture xxx 错误总结
- python之命令行解析工具argparse
- setTimeout(0) 即将退役
- 31 天重构学习笔记28. 为布尔方法命名
- 实现wordpress的首页文章摘要!
- HtmlUnit采集页面信息加工并写入excel表
- 李丽娟c语言第四版教师书_来,把自学C语言经历的那些苦,都踩在脚下
- oem客户工程流程图_OEM产品流程图