Bu yazıda recursive fonksiyonlardan kısaca bahsedip, anlaşılır olması açısından da recursive fonksiyon kullanarak faktöriyel hesaplama nasıl yapılır, mantığıyla birlikte açıklamaya çalışacağım.
Recursive(Rekürsif ya da özyinelemeli) fonksiyon, bir fonksiyonun kendini çağırması olarak ifade edilebilir. Diğer bir deyişle kendi kendini çağıran fonksiyonlarda denilebilir.
Şimdi recursive fonksiyon kullanarak, faktöriyel bulma işlemi yapalım.
Burada bir sayı girerek girilen sayıyı “Faktoriyel” isimli metoda parametre olarak gönderiyoruz. Daha sonra bu metot bize girilen sayının faktöriyelini hesaplayıp geriye döndürüyor.
static void Main(string[] args) { Console.Write("Bir sayı giriniz : "); int input = Convert.ToInt32(Console.ReadLine()); Console.WriteLine(input + "! faktöriyel : " + Faktoriyel(input)); Console.ReadKey(); }
public static int Faktoriyel(int sayi) { if (sayi <= 1) { return 1; } return sayi * Faktoriyel(sayi - 1); }
Burada bu metot recursive yapıda çalışmakta, çalışma mantığını açıklamak gerekirse,
Öncelikle şunu açıklayalım, 0! ya da 1! faktöriyel her zaman 1'dir. Bu yüzden girilen sayı 0 ya da 1 yani şarta göre 2'den küçükse return 1 diyerek, metodumuzun 1 değerini dönmesini sağladık.
Burada biz 5! faktöriyeli hesaplayalım. Fonksiyon 5 faktöriyeli hesaplarken aşağıdaki adımlar gerçekleşir.
1.Adım ==> sayi = 5 için ==> return 5 * Faktoriyel(4);
2.Adım ==> sayi = 4 için ==> return 4 * Faktoriyel(3);
3.Adım ==> sayi = 3 için ==> return 3 * Faktoriyel(2);
4.Adım ==> sayi = 2 için ==> return 2 * Faktoriyel(1);
5.Adım ==> return 1;
Burada 5.adımda fonksiyon artık bize bir return değeri döndürdü. Bu yüzden işlem bitti, şimdi adımları sıraya koyarsak.
5.Adım ==> Faktoriyel(1) = 1
4.Adım ==> Faktoriyel(1) = 1 olduğundan return 2 * Faktoriyel(1) için 2 olur.
3.Adım ==> Faktoriyel(2) = 2 olduğundan return 3 * Faktoriyel(2) için 6 olur.
2.Adım ==> Faktoriyel(3) = 6 olduğundan return 4 * Faktoriyel(3) için 24 olur.
1.Adım ==> Faktoriyel(4) = 24 olduğundan return 5 * Faktoriyel(4) için 120 olur.
İşlem bittiği için sonuç olarak fonksiyon bize 120 değerini döndürür.
Ek olarak yine recursive fonksiyon kullanarak, girilen sayı adedi kadar fibonacci dizisindeki sayıları getiren örneği de aşağıda bulabilirsiniz.
static void Main(string[] args) { Console.Write("Bir sayı giriniz : "); int sayi = Int32.Parse(Console.ReadLine()); for (int i = 0; i <= sayi; i++) Console.WriteLine(FiboHesapla(i)); Console.ReadKey(); } public static int FiboHesapla(int sayi) { if (sayi == 0) return 0; else if (sayi == 1) return 1; return FiboHesapla(sayi - 1) + FiboHesapla(sayi - 2); }
Umarım recursive fonksiyon yapıları anlaşılmışdır. Anlamadığınız yerleri yorumlar bölümünde belirtebilirsiniz. Herkese iyi çalışmalar 🙂