通過尾遞歸避免棧溢出
阿新 • • 發佈:2018-02-13
use asc 避免 由於 pre javascrip sta 溢出 down
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。
通過尾遞歸避免棧溢出