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

通过尾递归避免栈溢出相关推荐

  1. python递归和循环的区别_递归与伪递归区别,Python 实现递归与尾递归

    递归函数在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函 数.(1) 递归就是在过程或函数里调用自身.(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出 ...

  2. Python 2.4 递归函数

    递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用本身,这个函数就是递归函数. 举个例子:计算阶乘n!=1*2*3*4*5*...*n,用函数fact(n)表示,可以看出 fact(n)= ...

  3. python所有函数用法_python函数用法总结

    空函数 如果想定义一个什么事也不做的空函数,可以用pass语句: def nop(): pass pass语句什么都不做,那有什么用?实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码 ...

  4. Python编程核心内容 ---- Function(函数)

    什么"大事"呢?下面将要介绍Python编程的核心内容之一--函数. 对于Python编程,函数的重要性不言而喻.重要的事情讲三遍:函数实在是太重要,太关键了. 引入函数 之前,我 ...

  5. python递归函数特点_python中对递归函数的理解

    在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 举个例子,我们来计算阶乘n! = 1 * 2 * 3 * ... * n,用函数fact(n)表示,可以看出: f ...

  6. Python学习笔记:函数

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  7. Python入门学习---第三天

    函数 函数 基本上所有的高级语言都支持函数,Python也不例外.Python不但能非常灵活地定义函数,而且本身内置了很多有用的函数,可以直接调用. 抽象是数学中非常常见的概念.写计算机程序也是一样, ...

  8. Python3学习笔记(2)——递归函数

    如果一个函数在内部调用自身本身,这个函数就是递归函数. 递归函数的优点是定义简单,逻辑清晰.理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰. 使用递归函数需要注意防止栈溢出.在计 ...

  9. python基础——递归函数

    python基础--递归函数 递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数.举个例子,我们来计算阶乘n! = 1 x 2 x 3 x ... x n,用 ...

最新文章

  1. line_profile逐行代码分析
  2. php300类库,扩展类库 · PHP300FrameWork · 看云
  3. torchvision 笔记:transforms.Normalize()
  4. redis pub/sub 聊天
  5. Go语言 gRPC 实践(一)
  6. 如何掌握Java内存(并保存程序)
  7. AcWing 830. 单调栈
  8. 心情随笔之纸包子假新闻 [2007年7月25日]
  9. -bash:ls:command not found,执行命令总是报找不到
  10. IDEA 代码格式化插件Save Actions示范
  11. javaweb springboot餐厅点餐系统源码
  12. ffmpeg ffprobe查看视频文件编码格式
  13. c语言寻找丑数,C语言程序设计100例之(14):丑数
  14. ROS:launch规范及用法
  15. phyton方面相关书籍
  16. 孙氏太极拳--无极桩
  17. Notepad++安装HexEditor插件
  18. open wrt 跟换主题_分享个openwrt主题 可以简单自定义的 主题
  19. 蚂蚁金服面试题和答案
  20. Python进行表格拆分

热门文章

  1. HTML5 ArrayBufferView之DataView
  2. 新建指令避开 Avalon 的 ms-duplex 的问题
  3. Xcode编译Undefined symbols for architecture xxx 错误总结
  4. python之命令行解析工具argparse
  5. setTimeout(0) 即将退役
  6. 31 天重构学习笔记28. 为布尔方法命名
  7. 实现wordpress的首页文章摘要!
  8. HtmlUnit采集页面信息加工并写入excel表
  9. 李丽娟c语言第四版教师书_来,把自学C语言经历的那些苦,都踩在脚下
  10. oem客户工程流程图_OEM产品流程图