Java – Recursive(Özyinelemeli) Düşünmek

Kullandığımız her popüler programlama dilinde olduğu gibi Java programlama dilinde de  recursive(yinelemeli) yöntemler mevcuttur.Peki bu tip yöntemler nasıl çalışır? İşin arka planında neler oluyor?

Aslında tüm recursive yöntemler iki kısımdan oluşur “Base Case” ve “Recursive Case”.

Base Case : Döngülerde yaptığımız gibi bir durdurma koşulu veya kontrolü aslında altta örneğini verdiğimiz faktöriyel yönteminde sayının ikiden küçük olma durumu bir base casedir.Base Case döngünün zincirini kırar.

Recursive Case : Recursive satırlara deriz,yöntemin kendi kendini çağırmasıdır birden fazla kere bu işlem tekrar edilebilir.

 

Recursive kelimesinin anlamını ve bize neler çağrıştırması gerektirdiğinden bahsedelim.Programlama yaparken iterative(döngü yoluyla) yapabildiğimiz herşeyi recursive yollada yapabiliriz.Recursive örneklerinin başında gelen faktöriyel bulma yöntemimize göz atalım.

public static int factorial(int n) {
   if(n<2)
   {
      return 1;
   }
   else
   {
      return n * factorial(n-1);
   }
}

Bu yöntem ile istediğimiz sayının faktöriyelini bulabiliyoruz  ilk bakışta factorial(n-1) ifadesi hiçbişey ifade etmiyor. Şimdi factorial(3)’ü çağırdığımızda işin arkaplanın da neler oluyor beraber bakalım.

 

 

Biz main() fonksiyonumuzdan factorial(3) ü çağırdığımız zaman.Oluşan durum yukarda ki resimdeki gibidir.Adım adım anlatımı aşağıda.

İlk Adımlar

Adım 1-) n=3 [3 !< 2] -> return 3 * factorial(2) {factorial(2) yöntemi şimdilik ramde tutuluyor ve sırası geldiği zaman kendini tekrar çağıracak ve bizi sonuca ulaştıracak.}

Adım 2-) n=2 [2 !<2] -> return 2 * factorial(1) {factorial(1) yöntemi şimdilik ramde tutuluyor ve sırası geldiği zaman kendini tekrar çağıracak ve bizi sonuca ulaştıracak.}

Adım 3-) n=1 [1 < 2] -> return 1 {Evet bu kısımda "Base Case" e ulaştık ve zincir kırıldı artık elimizde bir sayı var buda 1 sayısı.Şimdi sıra ramde tuttuğumuz factorial(1),factorial(2),factorial(3) yöntemlerini geri çağırmaya geldi.}

Geri Çağırma Adımları

Adım 4-)factorial(2) -> return 2 * 1 -> { Bu kısımda factorial(1) in değerinin 1 olduğunu bulduğumuza göre artık factorial(1) yerine 1 yazabiliriz.Ayrıca bu yöntemin döndürdüğü değer olan 2'nin de factorial(2) nin sonucu olduğunu görmeliyiz.}

Adım 5-)factorial(3) -> return 3 * 2 -> { Son olarak factorial(2) nin değerini yerine yazıyoruz ve sonuç karşımızda! }
Java içinde yayınlandı

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir