Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 12.08.2022
Сообщений: 9

Как увеличить количество циклов в рекурсии ?

06.10.2023, 17:46. Показов 1114. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте


Есть код:


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# массив с числами
nums = [0,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,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120]
 
# сумма
target = 239
 
# функция, которая найдёт ответ
def twoSum(nums, target):
    # сообщение по умолчанию
    answer = 'В массиве нет такой пары чисел'
    # запускаем первый цикл
    for i in range(len(nums) - 1):
        #  запускаем второй цикл
        for j in range(i + 1, len(nums)):
            # если получили нужный результат —
            if target == nums[i] + nums[j]:
                # меняем ответ и добавляем в него индексы элементов
                answer = 'Ответ: ' + str(i) + ' и ' + str(j)
    # выводим результат работы функции 
    return answer
 
# запускаем код
print(twoSum(nums, target))

В нем есть элемент:


Python
1
2
3
4
5
for i in range(len(nums) - 1):
        #  запускаем второй цикл
        for j in range(i + 1, len(nums)):
            # если получили нужный результат —
            if target == nums[i] + nums[j]:

Как его модифицировать что бы он 3 и более числа образующие сумму искал ?


первая строка:

for i in range(len(nums) - 1):

от i начинает работать,

цикл в предыдущем цикле:

for j in range(i + 1, len(nums)):

а дальше

for ? in range(?+ 1, (?)):

там где вопросительные знаки что нужно указывать ?

Большое спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.10.2023, 17:46
Ответы с готовыми решениями:

Как увеличить глубину рекурсии
почему глубина рекурсии в С++ ограничена (43281) можно ли снять это ограничение написал код который устанавливает максимальную глубину ...

задача с использованием рекурсии и циклов
необходимо реализовать задачу 2 вариантами: 1.с помощью рекурсии 2.с помощью циклов. Определить функцию, осуществляющую несколько замен х...

Алгоритм с использованием рекурсии и циклов
Здравствуйте. Дана задача, которую нужно решить с использованием рекурсии, а не обычных циклов Дано поле размером N на M. Правильно ...

9
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
06.10.2023, 18:04
xazs, причем тут рекурсия?
ты напиши свою задачу, а не придумывай велосипед.
0
0 / 0 / 0
Регистрация: 12.08.2022
Сообщений: 9
06.10.2023, 18:17  [ТС]
eaa,

Цикл в цикле это, мне нужно переделать код что бы он искал большее количество слагпемых.


Задание
У нас есть массив с целыми числами, как с положительными, так и отрицательными. Все числа в массиве разные. Если сложить или вычесть любые два числа из массива, они точно поместятся в стандартной целочисленной переменной.

Ещё у нас есть какое-то целое число — оно не в массиве, а само по себе, отдельной переменной.

Нужно вывести индексы тех двух элементов, которые в сумме дают то самое отдельное число. Например, если в массиве у нас (2, 4, 5, 1, 8), а число — 5, то ответом будет пара 1 и 3, потому что на этих местах стоят числа 4 и 1 (и дают в сумме 5). Помните, что нумерация массивов почти во всех языках программирования начинается с нуля.

Решение простым перебором
...

Вот ссылка на первоисточник кода:

https://thecode.media/leet-code-1/

???

Большое Спасибо
0
2619 / 1630 / 266
Регистрация: 19.02.2010
Сообщений: 4,327
06.10.2023, 18:46
Цитата Сообщение от xazs Посмотреть сообщение
мне нужно переделать код что бы он искал большее количество слагпемых.
Перебор здесь будет являться почти полным аналогом задачи перебора всех значений числа из n знаков в системе счисления по основанию m.
n - это число твоих будущих "слагаемых".
m - число значений в массиве nums из первого поста.
Небольшим отличием является лишь необходимость начинать i-ый (идём справа налево, нумерация с нуля) разряд числа со значения i.
Поэтому берешь и переводишь на питон идею/код из этого поста Функция по типу product() в Python , изменив там в первом коде строку 7 на Index[i]=i;
Ну и там идёт вывод на печать всех комбинаций - а тебе надо будет выводить только те, которые будут складываться в нужное число.
0
0 / 0 / 0
Регистрация: 12.08.2022
Сообщений: 9
06.10.2023, 18:54  [ТС]
VTsaregorodtsev,



Спасибо за Ваш ответ, но разница большая перебирать "под число" и все вподряд, включаявывод на экран всего вподряд.

.Не подскажете,как мне в коде сделать больше циклов в цикле?


Большое спасибо
0
2619 / 1630 / 266
Регистрация: 19.02.2010
Сообщений: 4,327
06.10.2023, 19:10
Цитата Сообщение от xazs Посмотреть сообщение
но разница большая перебирать "под число" и все вподряд
У тебя в коде тоже полный перебор всего вподряд.

Цитата Сообщение от xazs Посмотреть сообщение
включаявывод на экран всего вподряд.
Я же последним предложением написал, что всё подряд на экран не надо.
Т.е. во втором коде там строку 7 переделываешь на суммирование слагаемых, и затем если сумма получилась нужной величины - повторяешь цикл (строки 6-7) уже для вывода результата.
В итоге на экран будут выводится только правильные решения ("под число"). Но они будут выведены все - а не только последнее решение (как в твоём коде).

Цитата Сообщение от xazs Посмотреть сообщение
Не подскажете,как мне в коде сделать больше циклов в цикле?
Хм... Понятно, что код в стартовом посте не твой, и в питоне ты вообще не шаришь.
Иначе бы ты справился сам:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# массив с числами
nums = [0,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,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120]
 
# сумма
target = 239
 
# функция, которая найдёт ответ
def threeSum(nums, target):
    # сообщение по умолчанию
    answer = 'В массиве нет такой пары чисел'
    # запускаем первый цикл
    for i in range(len(nums) - 1):
        #  запускаем второй цикл
        for j in range(i + 1, len(nums)):
            for k in range(j + 1, len(nums)):
                # если получили нужный результат —
                if target == nums[i] + nums[j] + nums[k]:
                    # меняем ответ и добавляем в него индексы элементов
                    answer = 'Ответ: ' + str(i) + ' и ' + str(j) ' и ' + str(k)
    # выводим результат работы функции 
    return answer
 
# запускаем код
print(threeSum(nums, target))
- это для трёх слагаемых. Для 4, 5 и т.д. переделывай код сам по образцу. Но думать/программировать при этом не научишься - научишься говнокодингу.
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
06.10.2023, 19:16
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
from itertools import combinations
 
nums = [0, 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, 26, 27, 28, 29,
        30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
        58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
        86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
        111, 112, 113, 114, 115, 116, 117, 118, 119, 120]
 
target = 239
n = 3
for p in combinations(nums, n):
    if sum(p) == target:
        print(p)
смысла задачи все равное не понял.
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
06.10.2023, 19:21
Цитата Сообщение от xazs Посмотреть сообщение
Как его модифицировать что бы он 3 и более числа образующие сумму искал ?
Это уже 3-sum задача. Ее решение, помнится, через сортировку и 2 указателя решается. А более - только перебор.

Добавлено через 2 минуты
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
26
27
public List<List<Integer>> threeSum(int[] nums, int target) {
    Arrays.sort(nums);
 
    final Set<List<Integer>> result = new HashSet<>();
    for (var i = 0; i < nums.length; i++) {
        final var x = nums[i];
        var j = i + 1;
        var k = nums.length - 1;
        while (j < k) {
            final int y = nums[j];
            final int z = nums[k];
            final int sum = x + y + z;
            if (sum == target) {
                result.add(IntStream.of(x, y, z).sorted().boxed().toList());
                j++;
                k--;
                continue;
            }
            if (sum < 0) {
                j++;
                continue;
            }
            k--;
        }
    }
    return new ArrayList<>(result);
}
1
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
06.10.2023, 19:22
Цитата Сообщение от Arsegg Посмотреть сообщение
3-sum задача
ага, a 4sum через бин.поиск.
1
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
06.10.2023, 19:28

Не по теме:

Цитата Сообщение от eaa Посмотреть сообщение
a 4sum через бин.поиск.
Надо будет попробовать на досуге прорешать)


0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.10.2023, 19:28
Помогаю со студенческими работами здесь

Методом рекурсии вывести число слево на право. Не использую массивов циклов строк
Методом рекурсии вывести число слево на право. Не использую массивов циклов строк( а только рекурсию и арифметические операции) void...

Алгоритм с использованием рекурсии и циклов: сохранить в бинарный файл все возможные перестановки элементов массива
Такое задание: Дан одномерный массив A размерностью N. Сохранить бинарно в файл все возможные перестановки элементов массива. ...

Как посчитать количество циклов? #7
program example_repeat; var i: integer; Begin i :=2; repeat i:=i+1; until i=2;

Как посчитать количество циклов? #5
program Hello; var x,k,y: integer; begin x:=15; k:=5; repeat k&gt;10

Как посчитать количество циклов? #6
var k, x, y: integer; begin k := 15; x := 0; repeat // начало тела цикла y := 5*x+3; x := x+2; k := k+1; ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru