Özyineleme (recursion), bir fonksiyonun kendi kendini çağırma yeteneğidir. Özyineleme, bir problemi küçük alt problemlere bölme yaklaşımını benimser. Genellikle problemin kendisiyle benzer bir alt problemi çözmek amacıyla kullanılır.
Özyineleme, iki önemli bileşeni içerir:
- Temel Durum (Base Case): Bu durum, özyinelemenin sonlanacağı durumu tanımlar. Yani, fonksiyon kendisini tekrar çağırmadan önce bir noktada durmalıdır. Temel durum, genellikle problem küçüldüğünde doğrudan çözülebilen durumu ifade eder.
- Özyineleme Adımı (Recursive Step): Bu adım, fonksiyonun kendisini çağırdığı ve problemin daha küçük bir versiyonunu çözdüğü adımdır. Bu, genellikle orijinal problemin alt problemlere bölündüğü kısmı ifade eder.
Örneğin, faktöriyel hesaplama özyineleme için iyi bir örnektir. Bir sayının faktöriyeli, o sayının kendisiyle, kendisinden bir azaltılmış sayının faktöriyeli çarpıldığında elde edilir. Bu tanım, kendini kullanarak özyinelemeli bir fonksiyonla ifade edilebilir.
Örnek olarak, 5’in faktöriyelini hesaplamak için:
1 2 3 | 5! = 5 * 4 * 3 * 2 * 1 |
Bu, 5’in kendisi ile (5-1)’in faktöriyeli çarpılarak hesaplanır. Bu özellik, özyinelemeyi kullanarak şu şekilde ifade edilebilir:
1 2 3 | faktoriyel(5) = 5 * faktoriyel(4) |
Bu özyineleme devam eder ve sonunda temel durum olan faktoriyel(0) = 1
noktasına ulaşır. Bu noktada özyineleme sonlanır ve bir üst seviyedeki çağrılardan elde edilen sonuçlar birleştirilerek tam sonuç elde edilir.
Bu şekilde, özyineleme, bir problemi daha küçük parçalara bölerek ve her parçayı aynı fonksiyonu kullanarak çözerek çalışır.
Örnek: Parametre olarak girilen sayıdan 0’a kadar olan sayıların çarpımını yapan aşağıdaki özyinelemeli fonksiyonda açıklamalar ve örnek kullanım bulunmaktadır.
Aşağıda özyinelemeli bir faktöriyel hesaplayan bir Python programını bulabilirsin. Bu program, parametre olarak verilen bir sayıdan 0’a kadar olan sayıların çarpımını hesaplar ve bir hata içermez.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | def sifira_kadar_carp(sayi): # Temel durum: Eğer sayi 0 ise, çarpım 1'dir. if sayi == 0: return 1 # Özyineleme: Sayıyı bir azaltarak kendisini tekrar çağır ve çarpımı hesapla. return sayi * sifira_kadar_carp(sayi - 1) # Örnek Kullanım: ornek_sayi = 4 sonuc = sifira_kadar_carp(ornek_sayi) # Sonucu ekrana yazdır. print(f"{ornek_sayi}'den 0'a kadar olan sayıların çarpımı: {sonuc}") |
Bu programda özyineleme, her adımda n
değerini bir azaltarak aynı fonksiyonu tekrar çağırarak gerçekleşir. Temel durum, n
değeri 0 olduğunda 1’i döndürmesidir.
Yani, örneğin faktoriyel_hesapla(5)
çağrısında:
1 2 3 | sifira_kadar_carp(4) -> 4 * sifira_kadar_carp(3) -> 4 * 3 * sifira_kadar_carp(2) -> 4 * 3 * 2 * sifira_kadar_carp(1) -> 4 * 3 * 2 * 1 * sifira_kadar_carp(0) -> 4 * 3 * 2 * 1 * 1 |
Bu şekilde, n
değeri 0’a ulaştığında temel durum devreye girer ve 1 döndürülür.
Bu program, özyineleme kullanarak faktöriyel hesaplamak için basit ve hatasız bir yol sunar.
Yorum Yap