Задача на рекурсию
function pow(x, n) {
return (n != 1) ? x*pow(x, n-1) : x; // 2*pow(2, 2)
}
alert( pow(2, 3) ); // 8
Объясните пожалуйста как оно высчитывает число 8 в строке 3 ? |
функция вызывает себя же.
матрёшка. pow(x, n) - вызываем pow(x, n-1) - вызываем pow(x, n-2) - вызываем и так пока n не не достигнет 1. Вы вызвали функцию. Эта функция в свою очередь вызывает себя же, но степень уже на 1 меньше, и так далее. Функция вызывается в функции, которая вызывается в функции. Ещё раз. 2 в кубе - это 2*(2*2) 2 в четвёртой - это 2*(2*(2*2))
function pow(x, n) {
return x нужно перемножить n раз
}
Вот как отработает функция. pow(2, 5) = 2 * (pow(2, 4)) = 2 * (2 * pow(2, 3)) = 2 * (2 * (2 * pow(2, 2))) = 2 * (2 * (2 * (2 * pow(2, 1)))) можно это делать в цикле
function pow(x, n) {
var result = 1;
for (var i = n; i >= 1; i--) {
result *= x;
}
return result
}
|
спасибо за подробное объяснение:)
|
Вообще не ясен замысел ф-ции, ведь есть уже всё.
alert(Math.pow(2, 3)); Цитата:
|
Цитата:
Функция вызывает _другую_ функцию по тому же самому имени.
var rec_func = function(res) {
if(++res>3)
return res;
else
return rec_func(res);
};
var d = rec_func(1);
d;
/*
4
*/
Произошло вот что Код:
rec_func // взяли текст, положили в память, начали выполнятьНикто там сам себя не вызывает. Идет тупое размножение с нуля. То есть с исходного текста применительно к интерпретатору и с исходных данных в компиляторе. |
Ну то есть для калькулятора нет никакой разницы в вызове другой функции из этой, и в вызове другой функции по тексту/кодам этой же.
Разница есть для нас, поскольку логика в другой функции по тексту/кодам этой же - такая же, что позволяет обрабатывать или строить самоподобные структуры. |
https://ru.wikipedia.org/wiki/%D0%A1...B1%D0%B8%D0%B5
Цитата:
[address] [address] [address] [address] [address] [address] [address] [address] [address] ... |
Цитата:
Скобками я попытался показать очерёдность выполнения:), они там для наглядности. |
| Часовой пояс GMT +3, время: 17:57. |