[英]How would I write a recursive function that sums an array of numbers that uses tail call optimization (TCO)?
[英]Tail call optimization (TCO) not working in Safari
根據ES6 兼容性表,Safari 具有尾調用優化功能。 試過了,它就像任何其他瀏覽器一樣失敗。 我錯過了什么嗎?
function factorial(n, r = 1n) { return (n <= 1)? r: factorial(n - 1n, n * r) } console.log(factorial(36000n))
Safari output:
RangeError:超出最大調用堆棧大小。
您需要在嚴格模式下運行程序。
"use strict"; function factorial(n, r = 1n) { return n <= 1n? r: factorial(n - 1n, n * r); } console.log(factorial(36000n).toString());
為了將 function 調用視為正確的尾調用,需要滿足四個條件。
- 調用 function 處於嚴格模式。
- 調用 function 是正常的 function 或箭頭 function。
- 調用 function 不是生成器 function。
- 被調用 function 的返回值由調用 function 返回。
資料來源: Michael Saboff 的 ECMAScript 6 Proper Tail Calls in WebKit
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.