Ponavljanje je postupak ponavljanja postupka radi generiranja niza rezultata (moguće neograničenih), s ciljem približavanja željenoj svrsi ili rezultatu. U kontekstu matematike ili računarstva, ponavljanje (zajedno s pripadajućom tehnikom rekurzije) standardni je blok algoritama.
U računalnom programiranju, iteracija, koju naziva i engleski pojam loop, je upravljačka struktura unutar algoritma koji rješava zadani problem, a koja nalaže računalu da u više navrata izvršava slijed uputa, općenito do pojave specifični logički uvjeti.
Važno je naglasiti da slijed i odabir čine jednu od tri temeljne strukture za algoritamsko rješavanje određenog problema prema Böhm-Jacopinijevom teoremu. Postoji nekoliko oblika ponavljanja; najpoznatiji su MENTRE, REPEAT i PER. Može se reći da je iteracija snažna karika programiranja koja vam omogućuje automatizaciju izvedbe procesa, što nije dovoljno za jednostavno izvršavanje niza uputa.
Takozvana "beskonačna petlja" slučaj je ponavljanja zbog programske pogreške koja zaustavlja izvršavanje programa, dok se u nekim tehnikama programiranja, posebno kod mikrokontrolera, namjerno koristi za beskonačno ponavljanje unutar programa.
U razvoju softvera, iteracija se koristi za opis heurističkog procesa planiranja i razvoja gdje se aplikacija razvija u malim odjeljcima koji se nazivaju iteracije. Svaku iteraciju pregledava i kritizira tim softvera i potencijalni krajnji korisnici; Uvidi stečeni kritikom iteracije koriste se za određivanje sljedećeg koraka u razvoju. Modeli podataka ili dijagrami sekvenci, koji se često koriste za crtanje iteracija, prate ono što je isprobano, odobreno ili odbačeno i na kraju služe kao svojevrsni nacrti konačnog proizvoda.
Izazov s iterativnim razvojem jest osigurati da su sve iteracije kompatibilne. Kako je svaka nova iteracija odobrena, programeri mogu upotrijebiti tehniku poznatu kao unatrag inženjering, što je sustavni postupak pregleda i provjere kako bi bili sigurni da je svaka nova iteracija kompatibilna s unatrag. Prednost korištenja iterativnog razvoja je u tome što je krajnji korisnik uključen u proces razvoja. Umjesto da se čeka dok aplikacija ne postane konačni proizvod, kada se promjene ne mogu lako izvršiti, problemi se identificiraju i rješavaju u svakoj fazi razvoja. Iterativni razvoj ponekad se naziva kružnim ili evolucijskim razvojem.