İterasyon nedir?
Programlamada iterasyon (yineleme), bir koşul sağlanana ya da bir koleksiyondaki her öğe işlenene kadar bir talimat grubunu, genellikle bir döngüyle, tekrarlamaktır. Tekrarlanan talimatlardan tek bir geçişe de iterasyon denir.
Güncellendi: 24 Eylül 2026
10.000 kullanıcıya hatırlatma e-postası gönderen bir program, gönderme kodunun 10.000 kopyasını içermez. Kodu bir kez, bir döngünün içinde içerir ve döngü onu her kullanıcı için bir kez çalıştırır. Her çalıştırma bir iterasyondur; döngünün bütünü de programın kullanıcıları tek tek dolaşma, yani onlar üzerinde iterasyon yapma biçimidir.
İterasyon adım adım nasıl çalışır
Her döngü aynı çevrimi izler:
- Kontrol et. Döngünün koşulunu test et; bu koşul bir boolean değerdir: başka bir öğe var mı, sayaç hâlâ sınırın altında mı?
- Çalıştır. Cevap doğruysa döngü gövdesini bir kez çalıştır.
- Güncelle. Sıradaki öğeye geç ya da sayacı değiştir.
- Tekrarla. 1. adıma geri dön. Kontrol yanlış sonucunu verdiğinde program döngüden sonraki kodla devam eder.
Burada gövde beş kez çalışır ve her iterasyon sıradaki sayıyı bir ara toplama ekler:
iteration 1 total is now 1
iteration 2 total is now 3
iteration 3 total is now 6
iteration 4 total is now 10
iteration 5 total is now 15
Done: 15
total değişkeni döngünün dışında yaşar, bu yüzden değerini bir iterasyondan diğerine korur. Döngüden önce atanan ve döngünün içinde güncellenen bir değişkenden oluşan bu kalıba biriktirici (accumulator) denir ve bir şey hesaplayan neredeyse her döngüde görünür.
Sayan döngüler ve koşullu döngüler
İki tür iterasyon vardır. Belirli iterasyon bilinen sayıda çalışır: bir listedeki her öğe için bir kez ya da 1'den 5'e kadar her sayı için bir kez. Python'un for döngüsü bunun için yapılmıştır ve çoğu zaman range() ile birlikte kullanılır.
Belirsiz iterasyon bir şey olana kadar tekrarlanır ve geçiş sayısı önceden bilinmez. Bu duruma while döngüsü uyar:
8 years, balance 214.36
Yılda %10 büyüyen paranın ikiye katlanması 8 yıl sürer. Program bunu bir denklem çözerek değil, iterasyonla buldu. for döngüleri ve while döngüleri rehberleri ikisini de Python'da anlatır.
Bir koleksiyon üzerinde iterasyon
Döngülerin çoğu bir koleksiyonun üzerinden geçer: bir dizinin elemanları, bir string'in karakterleri, bir dosyanın satırları. Python'un for döngüsü sana her elemanı doğrudan verir, enumerate() de elemanın konumunu ekler:
0 apple
1 banana
2 cherry
Perde arkasında for, koleksiyondan iter() ile bir iterator ister, sonra her iterasyonda onun üzerinde bir kez next() çağırır. Aynı çağrıları kendin de yapabilirsin:
red
green
blue
no more items
Varsayılan değer olmadan dördüncü next() bir StopIteration fırlatır. Bu istisna, bir for döngüsünün koleksiyonun bittiğini anlamak için kullandığı sinyaldir.
Diğer diller aynı fikri farklı yazar. C bir indeksle sayar, Java ve JavaScript'te ise her elemanı sana veren bir döngü de vardır:
for (int i = 0; i < 3; i++) {
printf("%s\n", colors[i]);
}
for (String color : colors) {
System.out.println(color);
}
for (const color of colors) {
console.log(color);
}
İterasyon ve özyineleme
Özyineleme (recursion), işi tekrarlamanın diğer yoludur: bir fonksiyon, doğrudan cevaplayabileceği bir duruma ulaşana kadar kendini problemin daha küçük bir hâliyle çağırır. Biriyle yazılabilen her şey diğeriyle de yazılabilir, ama farklı davranırlar:
| İterasyon | Özyineleme | |
|---|---|---|
| Nasıl tekrarlar | Döngü başa geri atlar | Fonksiyon kendini çağırır |
| Ne zaman durur | Döngü koşulu yanlış olduğunda | Temel duruma (base case) ulaşıldığında |
| Bellek | Geçiş sayısı ne olursa olsun aynı miktar | Hâlâ açık olan her çağrı için bir stack frame |
| Tipik hata | Sonsuz döngü | Stack overflow (Python'da RecursionError) |
| İyi uyduğu yer | Listeler, sayaçlar, bir koşul sağlanana kadar tekrar | Ağaçlar, iç içe veriler, böl ve fethet |
Bellek satırı pratikte önemlidir. Python varsayılan olarak yaklaşık 1.000 iç içe çağrıya izin verir, bu yüzden 5.000 sayının özyinelemeli toplamı, bir döngünün hiç zorlanmadığı yerde başarısız olur:
5050 5050
12502500
sum_recursive(5000) failed: RecursionError
Özyineleme görselleştirmesi, çağrı yığınının adım adım büyüyüp küçülmesini gösterir.
Sık yapılan hatalar
Sonsuz döngü. Koşulu hiçbir zaman yanlış olmayan bir while döngüsü, sen programı durdurana kadar çalışır. Genel neden güncelleme adımını unutmaktır, örneğin count = count - 1 satırını yazmamak.
Bir fazla ya da bir eksik. range(1, 5) 1, 2, 3 ve 4'ü verir, 5'i vermez, çünkü bitiş değeri hariçtir. Bir kez fazla ya da bir kez eksik çalışan bir döngü hata vermeden çalışır ve yanlış bir cevap verir; bu bir mantık hatasıdır.
Bir listenin üzerinden geçerken onu değiştirmek. Üzerinde iterasyon yaptığın listeden öğe silmek, döngünün eleman atlamasına yol açar:
[1, 2, 3]
Bir 2 hayatta kaldı, çünkü ilk 2'yi silmek ikincisini döngünün zaten geçtiği bir konuma kaydırdı. Bunun yerine yeni bir liste oluştur: numbers = [n for n in numbers if n != 2].
Sırada ne var
Döngüler koleksiyonların üzerinden geçer, bu yüzden dizinin ne olduğu bu sayfanın doğal eşidir; boolean'ın ne olduğu da bir döngünün ne zaman duracağına karar veren doğru/yanlış kontrollerini açıklar. Bir döngü hata mesajı vermeden yanlış sonuç verdiğinde mantık hatasının ne olduğunu oku. Döngü yazma pratiği için Python kursuna başla ya da yukarıdaki örnekleri Python playground içinde dene.
Sıkça Sorulan Sorular
İterasyona bir örnek nedir?
for döngüsü, her ad için bir tane olmak üzere 100 iterasyon çalıştırır. Doğru parola girilene kadar parola sormaya devam eden bir while döngüsü de iterasyondur, geçiş sayısı önceden bilinmese bile.Hangisi daha iyi, özyineleme mi iterasyon mu?
İterasyon döngüyle aynı şey mi?
for ya da while gibi dilin yapısıdır; iterasyon ise onun gerçekleştirdiği tekrardır. Döngü gövdesinden tek bir geçişe de iterasyon denir, yani 5 kez çalışan bir döngü 5 iterasyon yapar.Sprint ile iterasyon arasındaki fark nedir?
Iterable ne demek?
for ile üzerinde döngü kurabildiğin her nesnedir: liste, string, sözlük, dosya ya da range gibi. Python'da bir nesne, iter() ondan bir iterator üretebiliyorsa iterable'dır. Tam sayılar iterable değildir, for x in 5: satırının bir TypeError fırlatmasının nedeni budur.