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.


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

Bu blogdaki popüler yayınlar

31 : Fonksiyonda Struct Kullanımı

Structure - 29 : Yapılar ile Öğrenci Bilgileri Tutma

23 : İki Karakter Dizisini Birleştirme