Почему эта функция возвращает -3? - PullRequest
0 голосов
/ 13 февраля 2019

Когда я пробую эту функцию, консоль записывает как -3, но когда я работаю самостоятельно, кажется, что она возвращает 12. Почему это?

function func(x) {
  if (x <= 0) { 
    return x; 
  }
  return func(x - 5);
}
console.log(func(17));

Ответы [ 5 ]

0 голосов
/ 13 февраля 2019

Как уже говорилось в других ответах, причина, по которой он возвращает -3, заключается в рекурсии и в том, что вы вызвали функцию из себя.

Однако я хотел бы также добавить кодкоторый, я думаю, вы пытались написать, если ожидали, что результат будет 12:

function func(x) {
  if (x <= 0) { 
    return x; 
  }
  return x - 5;
}
console.log(func(17)); // <---12

Вам не нужно ссылаться на func, когда вы возвращаете x.

0 голосов
/ 13 февраля 2019

потому что при возврате вы звоните снова

function func(x) { <-- x=17

if (x <= 0) { 
return x; 
}
 return func(x - 5); <---x=12 so now you call the func with 12
}
console.log(func(17));

шаг 2

function func(x) { <-- x=12

if (x <= 0) { 
return x; 
}
 return func(x - 5); <---x=7 you call with 7 
}
console.log(func(17));

шаг 3

function func(x) { <-- x=7

if (x <= 0) { 
return x; 
}
 return func(x - 5); <---x=2 you call with 2
}
console.log(func(17));

шаг 4

function func(x) { <-- x=2

if (x <= 0) { 
return x; 
}
 return func(x - 5); <---x=-3 you call with -3
}
console.log(func(17));

последний шаг

function func(x) { <-- x=-3

if (x <= 0) { 
return x; <--- now you print the result
}
 return func(x - 5); 
}
console.log(func(17));

Редактировать:

Рекурсивные функции - это функции, которые вызывают себя до тех пор, пока условие прерывания не станет его истинным, в вашем примере это условие прерывания равно x его равному (=) илименьше (<) чем 0, а затем выведите результат. </p>

с 17 - первое число, которое вы получите, 5, возвращающее истинное условие con-break, равно -3

0 голосов
/ 13 февраля 2019

Это верно, вы должны получить -3.Ваша рекурсивная функция говорит: продолжайте вычитать x на 5, пока x не станет меньше или равно 0. Таким образом, первая итерация будет 12, затем 7, затем 2, затем, наконец, -3, что соответствует условию быть меньше или равным 0, а затем возвращаетх

0 голосов
/ 13 февраля 2019

Когда метод вызывает себя до тех пор, пока не удовлетворяет определенным критериям. В этом примере метод func() будет продолжать вызывать сам себя, передавая x-5 в качестве параметра, пока он не станет меньше 0, после чего он вернетсятекущее значение x.Таким образом, стек вызовов будет выглядеть примерно так:

func(17)

is (17 <= 0)? No
func(17 - 5)

is(12 <= 0)? No
func(12 - 5)

is(7 <= 0)? No
func(7 - 5)

is(2 <= 0)? No
func(2 - 5)

is(-3 <= 0) Yes!
return -3
0 голосов
/ 13 февраля 2019

Вы вызываете его один раз, затем он продолжает вызывать себя (при втором возврате) до тех пор, пока значение превышает 0. Таким образом, он продолжает работать до тех пор, пока значение не станет ниже 0, а затем возвращает окончательный результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...