Я пытаюсь добавить все кратные 3 или 5 менее 1000 с использованием рекурсивного метода.Ошибка рекурсии Java
Вот мой код
public static void main(String args[]){
//TODO: Find all the multiples of 3 or 5 below 1000
//Functional
System.out.println(addMultiples(1, 0));
/*
//Imperative solution
int num = 0;
for(int i = 1; i < 1000; i++){
if(i % 3 == 0 || i % 5 == 0){
System.out.println(i + " is a multiple of 3 or 5.");
num += i;
}
}
System.out.printf("The sum of all the multiples of 3 or 5 below 1000 is %d", num);
*/
}
public static int addMultiples(int num, int base){
//Exit case
if (num >= 1000)
return base;
else if (num % 3 == 0 || num % 5 == 0)
base += num;
addMultiples(++num, base);
//I was forced to return a -1. Compiler said. :(
return -1;
}
Почему этот код возвращает -1? Понятно, что если num >= 1000
, рекурсия остановится. Я попытался положить System.out.println(base)
внутри моего условия выхода, и он распечатывал номер, который я хотел.
Кроме того, почему компилятор сказал мне вернуть -1?
Он всегда будет возвращать '-1', так как вы всегда будете возвращать это значение. Дважды проверьте пути выполнения. – Makoto
remove 'return -1' и make' return addMultiples (++ num, base); ' –
Интересно, какой компилятор заставит кого-то вернуть' -1' ... –