Java Özyineleme
Java Özyineleme
Özyineleme, bir işlev çağrısının kendisini yapma tekniğidir. Bu teknik, karmaşık sorunları çözmesi daha kolay basit sorunlara ayırmanın bir yolunu sağlar.
Özyinelemeyi anlamak biraz zor olabilir. Nasıl çalıştığını anlamanın en iyi yolu, onunla deney yapmaktır.
Özyineleme Örneği
İki sayıyı birbirine eklemek kolaydır, ancak bir dizi sayı eklemek daha karmaşıktır. Aşağıdaki örnekte, özyineleme, bir sayı aralığını iki sayı eklemek gibi basit bir göreve bölerek bir araya getirmek için kullanılır:
Örnek
10'a kadar olan tüm sayıları toplamak için özyinelemeyi kullanın.
public class Main { public static void main(String[] args) { int result = sum(10); System.out.println(result);
}public static int sum(int k) { if (k > 0) { return k + sum(k - 1); } else { return 0;
}}
}
Örnek Açıklama
Fonksiyon sum()
çağrıldığında, kendisinden k
küçük tüm sayıların toplamına parametre ekler k
ve sonucu döndürür. k 0 olduğunda, fonksiyon sadece 0'a döner. Çalışırken, program şu adımları takip eder:
10 + ( 9 + toplam(8) )
10 + ( 9 + ( 8 + toplam(7) ) )
...
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + toplam(0)
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0
0 olduğunda fonksiyon kendini çağırmadığı k
için program orada durur ve sonucu döndürür.
Durdurma Durumu
Nasıl döngüler sonsuz döngü sorunuyla karşılaşabiliyorsa, özyinelemeli işlevler de sonsuz özyineleme sorunuyla karşılaşabilir. Sonsuz özyineleme, işlevin kendisini çağırmayı asla bırakmamasıdır. Her özyinelemeli işlevin, işlevin kendisini çağırmayı bıraktığı koşul olan durma koşulu olmalıdır. Önceki örnekte, durma koşulu, parametrenin k
0 olduğu zamandır.
Konsepti daha iyi anlamak için çeşitli farklı örnekler görmek faydalı olacaktır. Bu örnekte, işlev, bir başlangıç ve bir bitiş arasına bir sayı aralığı ekler. Bu özyinelemeli işlev için durdurma koşulu, bitişin başlangıç değerinden büyük olmadığı durumdur :
Örnek
5 ile 10 arasındaki tüm sayıları toplamak için özyinelemeyi kullanın.
public class Main { public static void main(String[] args) { int result = sum(5, 10); System.out.println(result);
}public static int sum(int start, int end) { if (end > start) { return end + sum(start, end - 1); } else { return end; } } }