Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 20.02.2021
Сообщений: 17

Посмотрите, нужно переделать код при с изпользованием рекурсии

20.02.2021, 15:32. Показов 5299. Ответов 27

Студворк — интернет-сервис помощи студентам
Нужна помощь переделать код:
Java
1
2
3
4
5
6
7
public static boolean maMaleRozdiely(int[] p, int odIdx, int poIdx, int rozdiel) {
        for (int i = odIdx; i < poIdx; i++)
                if (Math.abs(p[i + 1] - p[i]) > rozdiel)
                        return false;
 
        return true;
}
нужно сделать данный код при помощи рекурсии
Java
1
2
public static boolean maMaleRozdiely1(int[] p, int odIdx, int poIdx, int rozdiel) {
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.02.2021, 15:32
Ответы с готовыми решениями:

Как переделать код решенной задачи методом рекурсии на реализацию с циклами Do, и Loop
Дана последовательность чисел а1 ... аn. Если в результате замены отрицательных членов последовательности их квадратами, члены будут...

Код написан в Dev C. Не работает в Visual. Как нужно переделать код?
Здравствуйте. Столкнулась с такой проблемой: код был написан в Dev C, но в Visual он выдаёт ошибку. ...

Переделать исходный код. Код в Паскале,а нужно сделать его в Фортране
{$S+,R+} program arab_to_roman; uses crt; var n : word; ch : char; procedure convert(n : word);

27
0 / 0 / 0
Регистрация: 20.02.2021
Сообщений: 17
21.02.2021, 20:21  [ТС]
Студворк — интернет-сервис помощи студентам
Tavashi, [14, 15, 9, 32, 13, 26, 45, 37, 29, 23, 9, 5, 23, 5, 4, 0, 18, 48], 1, 17, 7
теперь при этих значениях не работает
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
21.02.2021, 22:07
Лучший ответ Сообщение было отмечено matuf как решение

Решение

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    public static boolean maMaleRozdiely(int[] p, int odIdx, int poIdx, int rozdiel) {
        if (odIdx != 0 && poIdx != 0) {
            p = Arrays.copyOfRange(p, odIdx, poIdx+1);
            odIdx = 0;
        }
        
        if (p.length <= 1) {return true; }
        if ((Math.abs(p[odIdx + 1] - p[odIdx]) > rozdiel) || (Math.abs(p[p.length/2-1] - p[p.length/2]) > rozdiel))
            return false;
        
        Boolean left = maMaleRozdiely(Arrays.copyOfRange(p, 1, p.length/2), 0, 0, rozdiel);
        Boolean right = maMaleRozdiely(Arrays.copyOfRange(p, p.length/2, p.length), 0, 0, rozdiel);
        
        if (left == false && right == false) {return false;}
        return left == right;
    }
0
0 / 0 / 0
Регистрация: 20.02.2021
Сообщений: 17
22.02.2021, 16:43  [ТС]
Tavashi, работает, но возник вопрос можно ли это переделать без использования Arrays.copyof
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
22.02.2021, 16:49
matuf, написать copyOf руками, очевидно же вроде.
0
0 / 0 / 0
Регистрация: 20.02.2021
Сообщений: 17
22.02.2021, 16:50  [ТС]
xoraxax, Нельзя испольно циклы, в этом и проблема, если б можно было бы, вообще вопросов 0, можно использовать if рекурсию и все
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
22.02.2021, 17:42
Цитата Сообщение от matuf Посмотреть сообщение
но возник вопрос можно ли это переделать без использования Arrays.copyof
Можете использовать System.arraycopy, который будет работать быстрее Arrays.copyOfRange. Последний как раз его и использует под капотом:
Java
1
2
3
4
5
6
7
8
9
    public static int[] copyOfRange(int[] original, int from, int to) {
        int newLength = to - from;
        if (newLength < 0)
            throw new IllegalArgumentException(from + " > " + to);
        int[] copy = new int[newLength];
        System.arraycopy(original, from, copy, 0,
                         Math.min(original.length - from, newLength));
        return copy;
    }
Можете еще через StreamApi, чтобы код выглядел посовременнее:
Java
1
2
3
4
5
6
7
8
9
10
11
...
        if (odIdx != 0 && poIdx != 0) {
            //p = Arrays.copyOfRange(p, odIdx, poIdx+1);
            int[] tempArr = p;
            p = IntStream.range(odIdx, poIdx+1)
                        .map(i -> tempArr[i])
                        .toArray();
            odIdx = 0;
        }
 
...
0
0 / 0 / 0
Регистрация: 20.02.2021
Сообщений: 17
22.02.2021, 18:44  [ТС]
Возможно что-то не правильно написал но посмотрите

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 public static boolean maMaleRozdiely(int[] p, int odIdx, int poIdx, int rozdiel) {
            if (odIdx != 0 && poIdx != 0) {
                int[] tempArr = p;
                p = IntStream.range(odIdx, poIdx+1)
                        .map(i -> tempArr[i])
                        .toArray();
                odIdx = 0;
            }
 
            if (p.length <= 1) {return true; }
            if ((Math.abs(p[odIdx + 1] - p[odIdx]) > rozdiel) || (Math.abs(p[p.length/2-1] - p[p.length/2]) > rozdiel))
                return false;
            int[] tempArr = p;
            Boolean left = maMaleRozdiely(p = IntStream.range(1, p.length/2)
                    .map(i -> tempArr[i])
                    .toArray(), 0, 0, rozdiel);
            Boolean right = maMaleRozdiely(Arrays.copyOfRange(p, p.length/2, p.length), 0, 0, rozdiel);
 
            if (left == false && right == false) {return false;}
            return left == right;
        }
заменил в рекурсии левой части и програма уже рабоатет не верно

Добавлено через 26 минут
Tavashi, выше написал
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
22.02.2021, 19:40
Лучший ответ Сообщение было отмечено matuf как решение

Решение

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    public static boolean maMaleRozdiely(int[] p, int odIdx, int poIdx, int rozdiel) {
        if (poIdx != 0) {
            int[] tempArrInit = p;
            p = IntStream.range(odIdx, poIdx+1)
                        .map(i -> tempArrInit[i])
                        .toArray();
            odIdx = 0;
        }
        
        int[] a = p;
        
        if (a.length <= 1) {return true; }
        if ((Math.abs(a[odIdx + 1] - a[odIdx]) > rozdiel) || (Math.abs(a[a.length/2-1] - a[a.length/2]) > rozdiel))
            return false;
        
        Boolean left = maMaleRozdiely(IntStream.range(1, a.length/2)
                        .map(i -> a[i])
                        .toArray(), 0, 0, rozdiel);
        Boolean right = maMaleRozdiely(IntStream.range(a.length/2, a.length)
                        .map(i -> a[i])
                        .toArray(), 0, 0, rozdiel);
        
        if (left == false && right == false) {return false;}
        return left == right;
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.02.2021, 19:40

Нужно перевести этот код из Паскаля в Javascript. Посмотрите пожалуйста!
type matrix = array of integer; var a : matrix; i, j, s1, s2 : integer; m : byte; begin randomize; ...

Посмотрите код, хорошо или плохо и как нужно. (заголовки h1-h6)
Верстаю с 2010 года (сентября), но до сих пор не разобрался с этими заголовками. Работаю с дополнениями для Firefox 'WebDeveloper'. ...

Есть такой код.Нужно переделать в код с функцией. Благодарю
program lab9(input,output); var s:string; len:integer; begin write('vvedit text:'); readln(s); len:=length(s); ...

Нужно переделать код с С ++ в обычный код Си
Добрый вечер, нужна помощь в таком вопросе, я новичок в программировании, поэтому обращаюсь к вам У меня есть код программы которая ищет...

Нужно переделать код с С ++ в обычный код Си
У меня есть код на С ++, нужно его переделать в код на языке Си Вот код: #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru