17 : Döngüsüz Faktoriyel Hesabı - Recursive fonksiyon
Daha önce faktoriyel hesabından bahsetmiştik. Kodu yazarken belli bir nokta isteyip döngülerle 1' den o sayıya kadar olan tam sayıları çarparak faktoriyel hesabını yapmıştık. Şimdi aynı hesabı başka bir yöntemle yapacağız. Bu yöntemin adı recursion olarak geçiyor. Özyineleme anlamına geliyor ve bir fonksiyonun kendi kendini çağırmasını amaçlıyor. Kod üzerinden açıklayalım.
Kullanıcıdan bir sayı istedik; n. Bu sayıyı faktoriyel_carpimi fonksiyonunda parametre olarak kullandık. faktoriyel_carpimi fonsiyonunda bu sayının 1' den büyük olup olmadığı kontrol edilir. Büyükse n * kısmından önce faktoriyel_carpimi(n-1) kısmı çalışır. Burada da aynı işlemler yapılır ta ki faktoriyel_carpimi fonksiyonunda n değeri 1 olana kadar. 1 olduğunda artık dönüşler başlayacak n * faktoriyel_carpimi(n-1); dönüşleriyle çarpımlar yapılacak.
Adım adım 4 girişi için takip edelim.
sonuc = faktoriyel_carpimi(4);
faktoriyel_carpimi(4) = 4>1 => 4 * faktoriyel_carpimi(3)
faktoriyel_carpimi(3) = 3>1 => 3 * faktoriyel_carpimi(2)
faktoriyel_carpimi(2) = 2>1 => 2 * faktoriyel_carpimi(1)
faktoriyel_carpimi(1) = 1 = 1 => 1
Fonksiyon dönüşleri başlar:
faktoriyel_carpimi(2) = 2 * 1 = 2
faktoriyel_carpimi(3) = 3 * 2 = 6
faktoriyel_carpimi(4) = 4 * 6 = 24
Sonuç 24 olarak bulunur. Burada her fonksiyon kendini parametreyi değiştirerek çağırmış oldu. Tabii bu parametreler belli bir düzen içinde ve bu düzeni bozan durum ilk dönüşü başlatan durum oluyor.
recursion.c
#include<stdio.h>
long int faktoriyel_carpimi(int n);
int main()
{
int sayi = 0;
long int sonuc = 0;
printf("Bir sayi giriniz: ");
scanf("%d", &sayi);
sonuc = faktoriyel_carpimi(sayi);
printf("%d faktoriyel = %ld \n", sayi, sonuc);
return 0;
}
long int faktoriyel_carpimi(int n)
{
if (n > 1)
return n * faktoriyel_carpimi(n-1);
else
return 1;
}
Kullanıcıdan bir sayı istedik; n. Bu sayıyı faktoriyel_carpimi fonksiyonunda parametre olarak kullandık. faktoriyel_carpimi fonsiyonunda bu sayının 1' den büyük olup olmadığı kontrol edilir. Büyükse n * kısmından önce faktoriyel_carpimi(n-1) kısmı çalışır. Burada da aynı işlemler yapılır ta ki faktoriyel_carpimi fonksiyonunda n değeri 1 olana kadar. 1 olduğunda artık dönüşler başlayacak n * faktoriyel_carpimi(n-1); dönüşleriyle çarpımlar yapılacak.
Adım adım 4 girişi için takip edelim.
sonuc = faktoriyel_carpimi(4);
faktoriyel_carpimi(4) = 4>1 => 4 * faktoriyel_carpimi(3)
faktoriyel_carpimi(3) = 3>1 => 3 * faktoriyel_carpimi(2)
faktoriyel_carpimi(2) = 2>1 => 2 * faktoriyel_carpimi(1)
faktoriyel_carpimi(1) = 1 = 1 => 1
Fonksiyon dönüşleri başlar:
faktoriyel_carpimi(2) = 2 * 1 = 2
faktoriyel_carpimi(3) = 3 * 2 = 6
faktoriyel_carpimi(4) = 4 * 6 = 24
Sonuç 24 olarak bulunur. Burada her fonksiyon kendini parametreyi değiştirerek çağırmış oldu. Tabii bu parametreler belli bir düzen içinde ve bu düzeni bozan durum ilk dönüşü başlatan durum oluyor.
Yorumlar
Yorum Gönder