Я хочу написать программу, которая работает рекурсив. Он должен добавить две переменные. Но мне просто разрешено прибавлять 1 или вычитать 1. Я сделал для файлов .Java. У каждого из них по одному классу.
Это основной класс:
package rekursion;
public class Main_function {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a= 5;
int b= 3;
int result = rekursion.Addierer_Multiplizierer.add(a, b);
System.out.print(result);
}
}
и это алгоритм:
package rekursion;
public class Addierer_Multiplizierer {
public static int add(int x, int y){ // here it Shows an error,
if (x >= 0 && y >= 0){ // because the return value
if (y==0){ // is not of type int
return x;
}
return add(++x, --y);
}
}
}
@azro ... правда, как IntelliJ IDEA




Позвольте мне немного отформатировать это для вас, чтобы было понятнее ...
public static int add(int x, int y){
if (x >= 0 && y >= 0){
if (y==0){
return x;
}
return add(++x, --y);
}
// ok, and what if not?
}
Ты видишь проблему? Внутри первого блока if вы всегда что-то возвращаете ... Но что, если (x >= 0 && y >= 0) не соответствует действительности? За это нет возврата. Значит, вам чего-то не хватает.
Нет, я переформатировал код и добавил комментарий, чтобы показать проблему, поскольку форматирование исходного кода - это то, что затрудняло просмотр ...
Это ответ, но по-сократовски, который подходит не каждому читателю. Вы можете отредактировать его, чтобы сказать, ваша функция не возвращает значение в случаях все.
Ваш метод должен иметь возвращаемое значение во всех его ветвях выполнения.
Вопрос в том, должны ли вы поддерживать отрицательные отзывы.
Если нет, вы можете изменить свой метод на:
public static int add(int x, int y)
{
if (y == 0) {
return x;
}
return add(++x, --y);
}
В противном случае вам нужно будет проверить знак y и решить, увеличивать или уменьшать y, чтобы привести его к 0:
public static int add(int x, int y)
{
if (y == 0) {
return x;
} else if (y > 0) {
return add(++x, --y);
} else {
return add(--x, ++y);
}
}
Или, если вы предпочитаете однострочник:
public static int add(int x, int y) {
return y == 0 ? x : y > 0 ? add(++x, --y) : add(--x, ++y);
}
@HarshitSeksaria Он имеет дело с рекурсией, которую, я думаю, сложнее понять, чем тернарный условный оператор.
Кроме того, компилятор должен предупредить вас, что в конце есть "Missing return statement", хорошая IDE сообщит вам об этом, вам следует работать с хорошими инструментами.