Возможна ли рекурсия с разными типами возвращаемых значений и параметров - PullRequest
0 голосов
/ 23 марта 2020

У меня есть подпись метода, где тип возвращаемого значения - массив строк, а параметр - строка. Я должен разбить строку, переданную методу, на подстроки длиной 3 и вернуть массив, содержащий все подстроки в качестве элементов. это тоже должно быть сделано рекурсивно.

Однако подпись метода, которую мне дают, имеет тип возвращаемого значения, отличный от параметра, поэтому рекурсия может работать в следующих условиях:

private String[] substrings(String string) {...

1 Ответ

0 голосов
/ 23 марта 2020

Конечно, почему бы и нет? Тип (ы) параметра и тип (ы) возврата не связаны друг с другом.

Вот пример обработчика событий, который даже не имеет типа возврата:

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)));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...