Вопрос JavaScript | Рекурсия. Помогите, не могу понять)))

Регистрация
22 Ноя 2013
Сообщения
101
Репутация
0
Спасибо
0
Монет
0
Есть вот такая ф-ция:

function pow(x, n) {
if (n == 1) {
return x;
} else {
return x * pow(x, n - 1);
}
}

alert( pow(2, 3) ); // 8

Я не могу понять, как в итоге функция возвращает 8. Как может вообще число умножится на вызов функции ( pow(x, n - 1) )?
 
Лучше всего подобные конструкции изучать методом пошаговой отладки с помощью отладчика. Сразу станет понятно как происходит работа циклов и переход по вызовам функций.
 
function pow(x, n) { if (n == 1) { return x; } else { return x * pow(x, n - 1); } } alert( pow(2, 3) ); pow(2, 3) ? ↓- else (1) → хочет вернуть: 2 * pow(2, 2) // вызывает функцию и ждет ↓- else (2) → → хочет вернуть: 2 * pow(2, 1) // Ждет ↓- if( n == 1 ) // выполнилось (3) → → → return 2 // возвращает число, как результат вызова pow(2, 1) ↓ (2) → → получает значение pow(2, 1), вычисляет и возвращает 2 * 2 = 4 ↓ (1) → получает значение pow(2, 2), вычисляет и возвращает 2 * 4 = 8
 
Лучше на YouTube посмотри визуальное объяснение. Вкратце происходит каскад вызовов функции, она как гармошка раскладывается и складывается.
 
Так число умножается не на функцию, а на ее результат, т. е. тоже на число. А рекурсией это называется, потому как функция внутри себя вызывает сама себя.
 
Назад
Сверху