рекурсивная программа для сложения и вычитания чисел

#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, никогда не изменяется.