Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Подскажите как в цикле или не используя цикл / 5 сообщений из 5, страница 1 из 1
03.11.2020, 22:22
    #40015080
x17.mstu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как в цикле или не используя цикл
Подскажите как в цикле или не используя цикл или через рекурсию
Не до конца понимаю как сделать через рекурсию чтобы на каждом шаге i запоминалось предыдущее состояние
создать строку, состоящую из чисел от 0 до 20000. Важно понимать, что это одна строка, полученная конкатенацией (“склеиванием”) чисел из диапазона через пробел (0 + “ “ + 1 + “ “ + 2 + … + 20000).
...
Рейтинг: 0 / 0
03.11.2020, 22:57
    #40015094
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как в цикле или не используя цикл
Тут не получается красивое решение на рекурсии в духе ФП.

Java не поддерживает хвостовую рекурсию. Тоесть она по настоящему будет использовать стек.
И надо обеспечить 20 тысяч уровней вложенности. Это опасно по причине Stackoverflow.
Возможно придется для этой задачи менять
Код: java
1.
$ java -Xss ....


Но вдвойне опасно то что на каждом уровне стека мы будем передавать растущую иммутабельную строку
которая также создаст проблемы для другой памяти типа Heap с квадратичным ростом потребления.
Это можно слегка придавить если передавать строку в передаваемый StringBuilder но это
как говорил Шипилёв - "калечить" код в угоду перформансу.

Вобщем я советую забыть вообще про рекурсию и делать циклом.
...
Рейтинг: 0 / 0
04.11.2020, 00:32
    #40015113
vsl
vsl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как в цикле или не используя цикл
x17.mstu,
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public class R {

    public static void main(String[] args) {
        System.out.println(numbers(Integer.parseInt(args[0]), Integer.parseInt(args[1])));
    }

    private static String numbers(int a, int b) {
        if (a >= b) return String.valueOf(a);
        int c = (a + b) / 2;
        return numbers(a, c) + " " + numbers(c + 1, b);
    }
}



java R 0 20000
...
Рейтинг: 0 / 0
04.11.2020, 00:38
    #40015114
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как в цикле или не используя цикл
Хм... делить пополам. Тоже интересно.
...
Рейтинг: 0 / 0
04.11.2020, 14:45
    #40015213
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как в цикле или не используя цикл
Напомнило оптимизацию Фибоначчи из SICP
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Подскажите как в цикле или не используя цикл / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]