@Azazel7

Почему функция с рекурсией выдает разные значения?

Не могу понять почему функция с рекурсией выдает разные значения:

function pow(x) {
if (x==1)
return 1;
else
return x + pow(x-1);
}
alert(pow(3));
Выдает число 6,(ожидаемый результат) , если заместо x поставить 3 т.е то значение которое передаю будет выдавать 7:

function pow(x) {
if (x==1)
return 1;
else
return 3 + pow(x-1);
}
alert(pow(3));
Поясните как работает рекурсия во втором примере и почему 7 а не 6.
  • Вопрос задан
  • 2694 просмотра
Пригласить эксперта
Ответы на вопрос 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
В первом варианте -
pow(3) = 3+pow(2) = 3+2+pow(1) = 3+2+1 = 6
Во втором -
pow(3) = 3+pow(2) = 3+3+pow(1) = 3+3+1 = 7
Компьютер делает не то, чего Вам от него хочется, а то, что Вы сказали ему сделать.
Ответ написан
Комментировать
Первый пример.
Цепочка получается такая:
pow(3) => 3*pow(2) => 3+2+pow(1) => 3+2+1=6.
Во второй цепочке будет
pow(3) => 3+pow(2) => 3+3+pow(1) => 3+3+1=7.
Ошибка ваши рассуждений в том, что замена x на 3 приводит к тому, что функция при любом вызове будет иметь там 3. А должна только первый раз, остальные разы(в данном случае раз, pow(2) должно быть уже 2, а константой получается 3).
Ответ написан
AloneCoder
@AloneCoder
[object Object]
pow(3) = 3 + pow(2) = 3 + 2 + pow(1) = 3 + 2 + 1 = 6
Или я не правильно понял ваш вопрос?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы