Конечно, почему бы и нет? Тип (ы) параметра и тип (ы) возврата не связаны друг с другом.
Вот пример обработчика событий, который даже не имеет типа возврата:
void processEvent(Event e) {
// do something with the event
processEvent(getNextEvent())
}
processEvent(getNextEvent());
Вот пример генератора рядов Фибоначчи, который имеет разные типы параметров (число) и возвращаемый (массив чисел):
long[] fibonacci(long n) {
if (n == 0) return new long[] { 1 };
if (n == 1) return new long[] { 1, 1 };
long[] a = fibonacci(n);
long[] b = fibonacci(n-1);
long[] both = Arrays.copyOf(a, a.length + b.length);
return System.arraycopy(b, 0, both, a.length, b.length);
}
Для вашего примера это будет выглядеть примерно так:
// Pseudocode only !!!
String[] substrings(String s) {
if (s.size <= 3) return new String[] { s };
return (new String[] { s.slice(0, 3) }).concat(substrings(s.slice(3)));
}