#javascript
#javascript
Вопрос:
Я пытаюсь понять, почему в этом случае слишком много рекурсии. Я не использовал никакого цикла.
function a(param1, param2) {
function b(input1) {
return input1 * 2;
};
function c(input2) {
return input2 * 2;
};
return a(param1) b(param2);
};
document.write(a(1, 2));
Комментарии:
1. Вы вызываете
a(param1)
внутриa
. Возможно, вы намеревались вызватьc
вместо этого…2. Где ваше условие остановки? Я его не вижу. Эта рекурсия будет продолжаться вечно.
3. Вы вообще знакомы с рекурсией? Вы пытались этому научиться?
4. Рекурсия демистифицирована : это всего лишь рекурсия, а не магия. Рекурсия — это просто функция, вызывающая другую функцию. Не нужно этому учиться (Джон может сделать это сейчас). Теперь самое сложное — это когда остановиться. Если функция вызывает саму себя, вам необходимо иметь изменяемый параметр / внешнюю переменную, которая сообщает ей, когда нужно остановиться.
Ответ №1:
В a
вашем return
заявлении a
снова вызывается вызов, поэтому он будет делать это бесконечно. Вы, вероятно, имели в виду:
return b(param1) c(param2);
Ответ №2:
Функция a продолжает вызывать саму себя. Вы имели в виду вместо этого вызвать функцию c?
Ответ №3:
Вы вызываете a внутри a . Это будет продолжать накапливать стек вызовами функций для себя. Вы не указали никаких условий завершения для своих вызовов, поэтому рекурсия продолжается до тех пор, пока у вас не закончится память.