Java на самом деле не является функциональным языком программирования, поэтому написание такого функционального кода, как правило, немного неуклюже.
Вы хотите что-то вроде этого:
public static List<Integer> FACTORISATION(int n) {
if (PRIME(n)) {
// return a one-element array
return Collections.singletonList(n);
} else {
// find a prime divisor, p
for (int i = 2; i < Math.sqrt(n); i++) {
List<Integer> newList = new ArrayList<>();
newList.add(i);
newList.addAll(FACTORISATION(n/i));
return newList;
}
return Collections.emptyList();
}
}
Примечание. Я изменил на тип интерфейса List<Integer>
, а также на Collections.singletonList
.
Если вы можете использовать Guava, попробуйте ImmutableList, который немного элегантнее.
public static List<Integer> FACTORISATION(int n) {
if (PRIME(n)) {
// return a one-element array
return ImmutableList.of(n);
} else {
// find a prime divisor, p
for (int i = 2; i < Math.sqrt(n); i++) {
return new ImmutableList.Builder<Integer>()
.add(i)
.addAll(FACTORISATION(n/i))
.build();
}
return Collections.emptyList();
}
}