Путаница в поведении между арифметическими c операторами и функциями? - PullRequest
0 голосов
/ 18 апреля 2020
function pow(x, n) {
  if (n == 1) {
    return x;
  } else {
    return x * pow(x, n - 1);
  }
}

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

source = https://javascript.info/recursion

Привет всем! Я запутался во втором операторе возврата этой функции:

return x * pow(x, n - 1);

Я просто ищу пояснения или ссылку на это поведение.

С моей точки зрения, это выглядит как x умножается только на первый параметр функции, а n-1 игнорируется.

(Как n-1 влияет на результат <- оригинальный вопрос) </p>

Извините, я перепутал оригинальный вопрос ... Я хочу спросить, как javascript интерпретирует это умножение. Умножая целое число на функцию, я не совсем понимаю, что происходит. Как javascript выбирает, что умножить на более чем один параметр?

1 Ответ

0 голосов
/ 18 апреля 2020

pow (2, 3) = 2 * pow (2, 2) = 2 * 2 * pow (2, 1) = 2 * 2 * 2

Вы не являетесь фактически рассчитывает произведение с n - 1, но ссылается на n как на счетчик. Это эквивалентно

var result = 1;
while (n >= 0) {
    result *= x;
    n--;
}
...