Page 75 - 6105
P. 75
Вимоги до пам'яті. Рекурсія призводить до зберігання всіх даних для
незакінчених зовнішніх викликів в стеку, в даному випадку це призводить до того,
що піднесення до степеня n зберігає в пам'яті n різних контекстів. Реалізація
піднесення до степеня через цикл набагато більш економна:
function pow (x, n) {
var result = x;
for (var i = 1; i <n; i ++) {
result * = x;
}
return result;
}
У такої функції pow буде один контекст, в якому будуть послідовно
змінюватися значення i і result.
Будь-яка рекурсія може бути перероблена в цикл. Як правило, варіант з
циклом буде ефективніше. Але переробка рекурсії в цикл може бути
нетривіальною, особливо коли в функції, в залежності від умов, використовуються
різні рекурсивні підвиклики, коли розгалуження більш складне.
6.3. Іменовані функціональні вирази
Спеціально для роботи з рекурсією в JavaScript існує особливе розширення
функціональних виразів, яке називається «Named Function Expression»
(скорочено NFE).
Звичайний функціональний вираз:
var f = function (...) {/ * Тіло функції * /};
Іменований фкнкціональний вираз з іменем sayHi:
var f = function sayHi (...) {/ * Тіло функції * /};
74