通过尾递归避免栈溢出
生活随笔
收集整理的這篇文章主要介紹了
通过尾递归避免栈溢出
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
JavaScript中的遞歸即函數(shù)內(nèi)調(diào)用函數(shù)自身,但遞歸是非常耗內(nèi)存的,每一次調(diào)用都會分配一定的棧空間,達(dá)到一定的數(shù)量(具體看瀏覽器)便會溢出報(bào)錯(cuò)。
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對于尾遞歸來說,由于只存在一個(gè)調(diào)用幀,所以永遠(yuǎn)不會發(fā)生“棧溢出”錯(cuò)誤。
'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實(shí)際上還是報(bào)錯(cuò)了:D。
通過尾遞歸避免棧溢出
轉(zhuǎn)載于:https://www.cnblogs.com/mazey/p/8447109.html
總結(jié)
以上是生活随笔為你收集整理的通过尾递归避免栈溢出的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 北京君正集成电路的Newton平台--穿
- 下一篇: Java - 枚举