|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
02.10.2016, 18:51 | #1 |
Форумчанин
Регистрация: 15.12.2013
Сообщений: 414
|
Из рекурсии в итерацию
Здравствуйте. Помогите разобраться как в следующей программе сделать вместо рекурсивной функции - итерационную. Программа выводит последовательности длинно k, полученные с чисел 1,2 ...n.
Код:
Спасибо |
02.10.2016, 22:08 | #2 |
мальчик-помогай =)
Форумчанин
Регистрация: 16.09.2010
Сообщений: 522
|
скинь исходную задачу т. к. код такой, что.... кхм... у меня вон проект на 20+ solutions и то проще понять
если же тебе оно реально нужно, а не лишь бы сдать, то попробуй написать рекурсивную версию проще, а потом на иттеративную перенесёшь. |
03.10.2016, 18:07 | #3 |
Форумчанин
Регистрация: 15.12.2013
Сообщений: 414
|
Это сочетания (Сочетаниями из n элементов по k называются соединения, которые можно образовать из n элементов, собирая в каждое соединение k элементов; ). Результат на скрине. Вроде как должны быть циклы:
Код:
|
04.10.2016, 09:06 | #4 |
Форумчанин
Регистрация: 15.12.2013
Сообщений: 414
|
Не подскажите?
|
04.10.2016, 10:04 | #5 |
мальчик-помогай =)
Форумчанин
Регистрация: 16.09.2010
Сообщений: 522
|
Тут не программирование, а математика, ещё и мутная..... всем лень)
Сейчас загуглил "вывод сочетаний код" и нашёл, например, весьма хороший сборник по комбинаторике... почитай, там твоя задача, вроде, есть |
04.10.2016, 11:00 | #6 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,527
|
http://programmersforum.ru/showthrea...F0%E5%E1%EE%F0
Это не С, и не совсем число сочетаний (нет требования различности элементов). Но перебор и с помощью циклов (итераций).
программа — запись алгоритма на языке понятном транслятору
|
04.10.2016, 14:33 | #7 | |
Форумчанин
Регистрация: 15.12.2013
Сообщений: 414
|
Цитата:
которые я выделила. Что это может значить? mas[lst + 1] присваивается истина, потом вызывается функция func(lst + 1, cnt + 1);, а при каких услових вызывается func(lst + 1, cnt);. Вообще не понимаю |
|
04.10.2016, 14:56 | #8 | |
мальчик-помогай =)
Форумчанин
Регистрация: 16.09.2010
Сообщений: 522
|
Цитата:
Смысл в том что при func(lst + 1, cnt + 1) у нас mas[lst + 1] = true, а в др. случаях - false.... оно, конечно, смысл имеет, это часть того самого префикса, пусть и в скрытом виде, НО лучше забить и написать\найти иттеративный вариант с нуля |
|
04.10.2016, 15:23 | #9 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,527
|
mas[] массив признаков использования чисел [0... n-1] +1 для генерации (вывода) последовательности
Цитата:
мы всегда имеем ДВА варианта (использовать/неиспользовать) данное число mas[lst + 1] = true; func(lst + 1, cnt + 1); // выполнить "спуск" с УВЕЛИЧЕНИЕМ (cnt+1) числа использованных чисел mas[lst + 1] = false; func(lst + 1, cnt ); // выполнить "спуск" БЕЗ увеличения (cnt) числа использованных Код:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 04.10.2016 в 15:37. |
|
04.10.2016, 23:37 | #10 |
Участник клуба
Регистрация: 14.05.2016
Сообщений: 1,793
|
Обычно в рекурсии используется один вызов функции. Но два...
Ну, попробуй нарисовать "всю работу программы" - может что-то прояснится. Типа такого (красный цвет - это вызов рекурсивной функции, а синяя- возврат): 132.jpg Как ты видишь два вывода рекурсии резко увеличивает сложность задачи. Легче не имитировать этот кусок кода, а "придумывать" с нуля. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите с задачей по рекурсии: массив 1..N. с N переход на позицию N + 1 или N + 5. Определить с помощью рекурсии можно ли собрать сумму чисел K | polsovatel | C# (си шарп) | 2 | 22.09.2016 02:52 |
Цикл For next делает только одну итерацию | jirtreck | Microsoft Office Excel | 4 | 30.10.2015 16:56 |
Переделать рекурсию в итерацию в QBasic | Abimeleh | Помощь студентам | 0 | 04.07.2015 22:42 |
маленькая задача на простую итерацию | Генна | Помощь студентам | 0 | 02.04.2012 18:45 |
Перевод из рекурсии на итерацию | Anubys | Помощь студентам | 0 | 18.04.2011 18:12 |