#java #recursion
#java #рекурсия
Вопрос:
Я хочу реализовать эту программу, но она выдает ошибки при каждом вызове функции и запускает бесконечный цикл.
class abc
{
public static void main(String[] args) {
int n=16;
calll(n);
}
static int calll(int n)
{
if(n>0)
{
n=n-5;
calll(n);
return n;
}
else
{
n=n 5;
calll(n);
return n;
}
}
}
Комментарии:
1. это домашнее задание?, Вам не хватает базового условия в рекурсии.
2. Какова цель программы? Вы добавляете и вычитаете из
n
, поэтому это никогда не завершится.3. Вы все время вызываете свой метод calll(n) перед возвратом, поэтому он никогда не возвращается к возврату. Попробуйте на бумаге свой пример, вы поймете проблему.
Ответ №1:
Для вашей функции нет конечного условия.
Независимо от того, больше n 5 или нет, вы запускаете функцию calll, которая затем снова запускает функцию calll до бесконечности.
Вам нужно условие, которое завершит рекурсию, например, изменив функцию вызова на это:
static int calll(int n)
{
if(n>0)
{
n=n-5;
calll(n);
return n;
}
else
{
return n;
}
}
Однако функция по-прежнему довольно бессмысленна, поскольку вы фактически ничего не делаете с n. Имейте в виду, что n, которое вы определяете в функции main, никогда не изменяется.