Решение... Советы... Windows 10

Итерация – что это простыми словами. Разработка проекта. Итерация - это способ улучшения процесса Что такое итерация цикла

Итерация (лат. iteratio - повторение) - в математике, Одно из ряда повторений какой-либо математической операции, использующее результат предыдущей аналогичной операции. пример: Факториал(!) - N! = 1 х 2 х 3 x … x (N-1) x N, где N - любое целое число; Каждое последовательное умножение носит название «итерация».

Будучи существенно нелинейными вычислительными процессами, итерации в областях неустойчивости и бифуркационных «развилок» в точности воспроизводят хаотизацию поведения по сценарию Ферхюльста-Фейгенбаума, присущую нелинейным процессам самой разной физической, химической, биологической и даже социальной природы. См., напр.: Пайтген Х.-О., Рихтер П. Х. Красота фракталов. - М.: Мир, 1993.

Итерация в программировании

Итерация - это организация обработки данных, при которой действия повторяются многократно, не приводя при этом к вызовам самих себя.

Когда какое-то действие необходимо повторить большое количество раз, в программировании используются циклы . Например, нужно вывести 200 раз на экран текст «Hello, World! ». Вместо 200-кратного повторения одной и той же команды вывода текста часто создается цикл, который прокручивается 200 раз, и 200 раз выполняет то, что написано в теле цикла . Один шаг цикла и называется итерацией .

be:Ітэрацыя


Итерация и рекурсия в программировании.

Итерация в программировании

Итерация - это организации обработки данных, при котором действия повторяются многократно, не приводя при этом к вызовам самих себя.

Когда какое-то действие необходимо повторить большое количество раз, в программировании используются циклы. Например, нужно вывести 100 раз на экран текст «Hello, World!». Вместо 100-кратного повторения одной и той же команды вывода текста часто создается цикл, который прокручивается 100 раз, и 100 раз выполняет то, что написано в теле цикла. Один шаг цикла и называется итерацией.

В программировании рекурсия - вызов функции (процедуры) из неё же самой, непосредственно (простая рекурсия) или через другие функции (сложная рекурсия), например, функция A вызывает функцию B, а функция B - функцию A. Количество вложенных вызовов функции или процедуры называется глубиной рекурсии.

Мощь рекурсивного определения объекта в том, что такое конечное определение способно описывать бесконечно большое число объектов. С помощью рекурсивной программы же возможно описать бесконечное вычисление, причём без явных повторений частей программы.

Имеется специальный тип рекурсии, называемый «хвостовой рекурсией». Интерпретаторы и компиляторы функциональных языков программирования, поддерживающие оптимизацию кода (исходного и/или исполняемого), выполняют хвостовую рекурсию в ограниченном объёме памяти при помощи итераций.

Следует избегать избыточной глубины рекурсии, так как это может вызвать переполнение стека вызовов.

Итеративная и рекурсивная схема организации

Вычислительного процесса

Для того чтобы лучше понять особенности рекурсивных алгоритмов, полезно сопоставить итеративнную и рекурсивную огранизацию процесса вычислений в программе. Особенности итеративного и рекурсивного вычислительного процесса рассмотрим на примере вычисления значения факториала некоторого натурального числа N.

Итеративная схема организации вычислительного процесса

Итеративный процесс можно проиллюстрировать с помощью схемы, приведенной на рис. 55. Этот процесс состоит из четырех блоков: инициализации, принятия решения (о продолжении вычислений), вычисления и модификации.

В основе итеративного вычислительного процесса лежит итеративный цикл While, Repeat-Until, For. Наиболее общим является цикл While:

While < условие цикла > do < тело цикла >;

Итеративная схема вычисления факториала:

N! = 1 * 2 * 3 * … * N.

Процедура, реализующая итеративную схему вычисления факториала:

Procedure Iter_Fact (n: word; var f: word);

I:=1; f:=1; { инициализация }

While i < = n do begin { решение о завершении }

F:= f * i; { вычисления }

Inc(i); { модификация }

Существует два важных положения, известных в математике и в программировании, определяющих соотношение между итерацией и рекурсией.

1. Любой итеративный цикл может быть заменен рекурсией.

2. Рекурсия не всегда может быть заменена итерацией.

Рекурсивная схема организации вычислительного процесса

Общая схема рекурсивного вычислительного процесса представлена на рис. 56

Так как обращаться к рекурсивной процедуре можно как из нее самой, так и извне, каждое обращение к рекурсивной процедуре вызывает ее независимую активацию. При каждой активации образуются копии всех локальных переменных и формальных параметров рекурсивной процедуры, в которых “оставляют следы” операторы текущей активации. Таким образом, для рекурсивной процедуры может одновременно существовать несколько активаций. Для обеспечения правильного функционирования рекурсивной процедуры необходимо сохранять адреса возврата в таком порядке, чтобы возврат после завершения каждой текущей активации выполнялся в точку, соответствующую оператору, непосредственно следующему за оператором рекурсивного вызова. Совокупность локальных переменных, формальных параметров рекурсивной процедуры и адреса возврата однозначно характеризует текущую активацию и образует фрейм активации. Фрейм активации необходимо сохранять при очередной активации и восстанавливать после завершения текущей активации.

В блоке принятия решения (о продолжении вычислений) производится проверка, являются ли значения входных параметров такими, для которых возможно вычисление значений выходных параметров в соответствии с базисной частью рекурсивного определения. На основании этой проверки принимается решение о выполнении промежуточных или окончательных вычислений. Блок промежуточных вычислений можно объединить с блоком обращения к процедуре, если промежуточные вычисления очень просты. В блоке окончательных вычислений производится явное определение параметров-переменных процедуры для конкретных значений входных параметров, соответствующих текущей активации процедуры.

В основе рекурсивного вычислительного процесса лежит рекурсивный цикл, который реализуется через вызов рекурсивной процедуры, причем каждая активация рекурсивной процедуры эквивалентна одному проходу итеративного цикла While.

Общая схема рекурсивного цикла:

Procedure Рекурсивный_Цикл (…);

If < условие цикла > then

< тело рекурсивного цикла; >

Рекурсивный_Цикл (…);

В теле рекурсивного цикла (в блоке промежуточных вычислений) обязательно должны содержаться операторы, изменяющие значения переменных, от которых зависит условие завершения рекурсивного цикла. Напомним, что выполнение условия завершения рекурсивного цикла соответствует достижению базиса рекурсивного определения. Если значения этих переменных не успевают измениться до очередной активации рекурсивной процедуры, возникает бесконечный рекурсивный цикл.

Общая схема бесконечного рекурсивного цикла:

Procedure Бесконечный_Рекурсивный_Цикл (…);

If < условие цикла > then

Бесконечный_Рекурсивный_Цикл (…);

< тело рекурсивного цикла; >

Итерация представляет собой совокупность операций, в результате которой создаются выпуск продукта: стабильная исполняемая версия вместе со вспомогательными элементами, необходимыми для работы с ним. Таким образом, итерацию можно рассматривать в качестве одного полного прохода по всем дисциплинам, как минимум, включая управление требованиями, анализ и проектирование, реализация и тестирование. Итерацию можно сравнить с небольшим проектом водопадной модели. Обратите внимание на то, что критерии оценки устанавливаются отдельно для каждой итерации при ее планировании. У выпуска будет запланированный набор функций, который можно будет продемонстрировать. Продолжительность итерации зависит от масштабов и характера проекта, но в большинстве случаев в каждой итерации выполняется несколько компиляций продукта, согласно плану компоновки интеграции для конкретной итерации. Такой подход - следствие применение принципа непрерывной интеграции, рекомендованного в Rational Unified Process (RUP): по мере готовности автономно тестируемые компоненты интегрируются в систему, а затем система компонуется и тестируется на предмет правильности интеграции. При таком подходе набор функций интегрированного продукта расширяется по мере выполнения итерации и постепенно приближается к задачам, поставленным на этапе планирования итерации. Каждую компиляцию можно считать миниатюрной итерацией за той лишь разницей, что итерации требуют другого планирования и формальной оценки результатов. В некоторых проектах целесообразно компилировать продукт каждый день, однако такие компиляции нельзя назвать итерациями в определении RUP, если только это не миниатюрный проект, выполняемый одним программистом. Даже в малых проектах, над которыми работают несколько разработчиков (например, 5 программистов пишут 10000 строк кода), очень сложно реализовать итерации длительностью менее недели. Причины этого изложены в разделе Рекомендация: план разработки программного обеспечения .

Зачем нужны итерации?

Раньше большинство проектов сводилось к однократному последовательному выполнению всех предусмотренных дисциплин. Такой жизненный цикл называется водопадным :

Для такого подхода характерно накапливание огромного количества недоработок в сфере интеграции к концу цикла реализации, когда продукт впервые компилируется и начинается его тестирование. Всплывают ошибки, не замеченные на этапах анализа, проектирования и реализации, и проект практически останавливается на длительное время, в течение которого будут исправляться ошибки.

Более гибкий и менее рискованный подход к разработке заключается в многократном выполнении различных дисциплин для лучшего понимания требований, проектирования надежной архитектуры, оптимизации процесса разработки и проведения нескольких циклов реализации, в ходе которых продукт становится все более и более завершенным. Такой жизненный цикл называется итерационным . Однократное выполнение последовательности дисциплин процесса называется итерацией .

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

Главный результат применения итерационного подхода заключается в развитии и созревании описанных ранее продуктов работы , как показано на следующей диаграмме.

Эволюция информационного наполнения на различных этапах разработки.

Малая веха

Каждая итерация завершается малой вехой, в которой проверяется соответствие результата выполнения итерации критериям оценки, установленным для данной конкретной итерации.

Итерация - это установленный временной отрезок в рамках проекта, на протяжении которого осуществляется производство стабильной работающей версии продукта. К ней прилагаются установочные скрипты, сопровождающая документация, прочие артефакты, которые необходимы для применения данного релиза.

Краткие сведения

Работающая версия продукта позволяет показать заинтересованным лицам действительное развитие проекта. В ходе демонстрации команда разработчиков может получить отзывы о том, что необходимо осуществить для более широкого понимания потребностей и способов их реализации. Последующая итерация производится на базе предыдущей. Продукт, получаемый в результате, оказывается на один этап ближе к финальному. Итерация - это ограниченный период. Другими словами, график достаточно жестко фиксирован. Для того чтобы в этот график уложиться, наполнение временного отрезка может меняться.

Особенности

Итерация - это четко регламентированный период. Разработка проекта имеет тщательно спланированные цели, сама продолжительность временного отрезка фиксирована. При регламентировании для каждой итерации устанавливают собственные оценочные критерии. Вместе с этим между участниками, задействованными в проекте, четко распределяются ответственность и задачи. Дополнительно осуществляется исследование объективных показателей развития проекта. Итерация - это период, предполагающий определенное количество переделок. Следует сказать, что все они осуществляются структурированным способом.

Интеграция

Любая простая итерация должна учитывать вероятные риски, представляющие важность для проекта, а также реализовывать высокоприоритетные компоненты работы. В результате появляется уверенность в том, что при каждом периоде добавляется максимум ценного для заинтересованных лиц на фоне снижения неопределенности. Обычно итеративная разработка сочетается с непрерывной или частой интеграцией. Другими словами, с того момента как компоненты становятся удовлетворительными по результатам модульных тестов, их интегрируют в общий проект. После осуществляются сборка и тестирование. Так, возможности интегрированных продуктов на протяжении итерации возрастают относительно целей, которые были определены во время планирования. Регулярные сборки (каждодневные либо более частые) позволяют разделить проблемы и задачи интеграции и тестирования, распределить равномерно их по всему циклу разработки. Зачастую причина краха проектов состоит в том, что все затруднения обнаруживаются в один момент в рамках одного происходящего на завершающем этапе. В таком случае из-за единственной проблемы останавливается вся команда.

Перспективы

В связи со сложностью используемого сегодня программного обеспечения не всегда получается последовательно проектировать, определять требования, тестировать, реализовывать, выбирать архитектуру, выполнять эти и прочие этапы правильно. Решение методом итераций позволяет по завершении каждого периода дать доступ заинтересованным лицам к возможностям проекта. В этом случае при разработке команда быстро и периодически получает отзывы. Они, в свою очередь, позволяют вносить улучшения и решать проблемы с меньшими затратами в случае укладывания во временные и бюджетные рамки проекта и задолго до того момента, как развитие зайдет достаточно далеко, что могут потребоваться существенные доработки. Итерация позволяет получить действующий код. Его можно активировать, оценить и осуществить корректировку направления разработки проекта. Как правило, длительность периода составляет четыре недели. Однако существуют команды, работающие в течение семи дней или более продолжительное время - до полутора месяцев.