Прочитав описание д-ра Раушмайера рекурсивной оптимизации хвостовых вызовов в es6, С тех пор я пытался воссоздать выполнение рекурсивной факториальной функции с нулевым стеком, которую он подробно описывает.
Используя отладчик Chrome для перехода между кадрами стека, я вижу, что оптимизация хвоста не происходит, и для каждой рекурсии создается кадр стека.
Я также попытался протестировать оптимизацию, вызвав функцию без отладчика, но вместо этого передав 100000
функции факториала. Это вызывает ошибку «максимального стека», что означает, что на самом деле он не оптимизирован.
Вот мой код:
const factorial = (n, acc = 1) => n <= 1 ? acc : factorial(n - 1, n * acc)
console.log( factorial(100000) )
Результат:
Uncaught RangeError: Maximum call stack size exceeded
let acc = 1, n = 1e+5; while (n > 1) acc *= n--; console.log(acc)
- person Klaider   schedule 14.03.2017Infinity
, ноn
равно1
в конце xd - person Klaider   schedule 16.03.2017