Kayıt Ol

Giriş

Şifremi Kaybettim

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Giriş

Kayıt Ol

Recursive Fonksiyonlar (Özyineli Fonksiyonlar) Örnekleri ve Konu Anlatımı

C Programlama Dili Recursive fonksiyon örnekleri ve konu anlatımını bulabilirsiniz. Recursive Fonksiyon Avantajları, Dezavantajları ve Bileşenlerinin detayları.

Iteratif fonksiyonlar ve Recursive fonksiyonlar olarak Fonksiyonları ikiye ayırabiliriz. Iteratif fonksiyonlar, do while, while, for gibi döngüler kullanılarak bir işlemi birden fazla kez yapmaya yararlar. Recursive fonksiyonlar da bu döngüler asla kullanılmaz. Eğer bu döngüleri kullanıyorsanız fonksiyonunuza recursive diyemeyiz. Kısaca Recursive Fonksiyon, fonksiyonun kendisini çağırmasıyla bir işlemi birden fazla defa yapmaya yarar.

Recursive Fonksiyon Avantajları

  • Bazı durumlarda çok hızlı çalışır.
  • Genellikle çok az satır işlemde fonksiyonu yazabilirsiniz. Bu sayede okuması kolay kodlar yazabilirsiniz.

Recursive Fonsiyon Dezavantajları

  • Bazı dururumlar sürekli aynı işlemi yapabilir. Bu durumlarda iteratif fonksiyonlara göre yavaş olur.
  • Recursive işlemler Stack’de tutulduğundan bellek sorunu ortaya çıkabilir

Recursive Fonksiyon Bileşenleri

  1. Base Case (Temel durum): Recursive olmayan durum.
  2. General Case (Genel durum): Recursive durum.
  3. Convergence (Yakınlaşma): Base Case’e yaklaşma.

Recursive fonksiyon bileşenlerini fibonacci örneği üzerinden anlatmak ve anlamak çok kolay olacaktır.

F0 F1 F2 F3 F4 F5 F6 F7 F8 F9
0 1 1 2 3 5 8 13 21 34

Bilindiği üzere fibonacci serisi yukarıdaki gibidir. F= F2 + F1 şeklindedir.

Yukarıdaki şekilde tanımlamasını yapabiliriz.

Fibonacci serisinde sıfırıncı ve birinci değerlerin sonucu bir sayıdır. Yani recursive bir değer değildir. n=0 ve n=1 tanımlamaları Base Case‘di

n>1 durumunda ise f(n-1) + f(n-2) şeklindedir. Yani sonuç yine fonksiyona gitmektedir. Bu durum ise General Case olarak adlandırılmıştır. General Case asıl recursive durumdur.

General Case içerisinde f(n-1) ve f(n-2) görmekteyiz. Girilen n değeri n=0 ve n=1 durumlarına yaklaşmaktadır. Bu durum ise Convergence olarak adlandırılıyor.

Genel tanımlamaları geçtikten sonra faktöriyel örneği üzerinden recursive fonksiyonuna göz atalım.

Iteratif Faktöriyel Fonksiyon Örneği

Çıktı:

Recursive Faktöriyel Fonksiyon Örneği

Çıktı:

Adım adım recursive fonksiyona bakalım.

  1. Fonksiyona sayi değişkeni (değeri 4) gönderiliyor.
  2. 4 <= 1 mi diye kontrol ediliyor ve durumu sağlamadığı için if’i geçiyor.
  3. return 4* faktoriyel(3) olarak tekrar faktöriyel fonsiyonuna dönüyor. Bu sefer değer 3;
  4. 3 <= 1 mi diye kontrol ediliyor ve durumu sağlamadığı için if’i geçiyor.
  5. return 3*faktoriyel(2) olarak tekrar faktöriyel fonsiyonuna dönüyor. Bu sefer değer 2;
  6. 2<= 1 mi diye kontrol ediliyor ve durumu sağlamadığı için if’i geçiyor.
  7. return 3*faktoriyel(1) olarak tekrar faktöriyel fonsiyonuna dönüyor. Bu sefer değer 1;
  8. 1 <= 1 mi diye kontrol ediliyor ve durumu sağlıyor ve 1 değeri geri dönüyor. Bu işlemde sonra adım adım geri gidiyor. Tüm return değerleri stackte tutulmakta ve ilk return değerine gelene kadar stack işlemi devam edecektir.
faktoriyel(1) = 1
faktoriyel(2) = 2 * faktoriyel(1)
faktoriyel(3) = 3 * faktoriyel(2)
faktoriyel(4) = 4 * faktoriyel(3)

Stackteki durum yukardaki tablo da görülmektedir. Faktoriyel 1’in değerini bulduktan sonra stackte bir altındaki işleme geri dönmektedir. Faktöriyel 1’in değeri 1 olduğunu artık biliyoruz.

Faktoriyel 2 ise 2*1 olur ve sonuc 2 olur. Faktöriyel 2’den sonra Faktöriyel 3’e geçiş yapar. Artık faktöriyel 2’nin sonucunu da biliyoruz.

Fakroriyel 3 ise 3*2 olacaktır.  Faktöriyel 3’ün ise sonucunu 6 olarak bulduk. Faktöriyel 4 ise 4* faktöriyel 3 olduğundan 4*6’dan 24 olarak sonucu buluruz.

Aşağıdaki tablodan bazı Recursive Fonksiyon örneklerini bulabilirsiniz.

C Programlama Dili Recursive Faktöriyel Örneği  https://ckaynak.com/c-programlama-dili-recursive-faktoriyel-ornegi-1536
C Programlama Dili Recursive Fibonacci Örneği  https://ckaynak.com/c-programlama-dili-recursive-fibonacci-ornegi-1552
C Programlama Dili Recursive Girilen Sayıya Kadar Olan Sayıları Gösterme Örneği  https://ckaynak.com/c-programlama-dili-recursive-girilen-sayiya-kadar-olan-sayilari-gosterme-ornegi-1554
C Programlama Dili Recursive Girilen Sayıya Kadar Olan Sayıların Toplamı Örneği  https://ckaynak.com/c-programlama-dili-recursive-girilen-sayiya-kadar-olan-sayilari-toplama-ornegi-1556
C Programlama Dili Recursive Üs Alma Örneği  https://ckaynak.com/c-programlama-dili-recursive-us-alma-islemi-ornegi-1558
C Programlama Dili Recursive Çarpma İşlemi (Toplama İşlemi ile) Örneği  https://ckaynak.com/c-programlama-dili-recursive-carpma-islemi-toplama-islemi-ile-ornegi-1561
C Programlama Dili Recursive Negatif Çarpma İşlemi(Toplama İşlemi ile) Örneği  https://ckaynak.com/c-programlama-dili-recursive-negatif-carpma-islemi-toplama-islemi-ile-ornegi-1563
C Programlama Dili Recursive Bölme İşlemi (Çıkartma İşlemi ile) Örneği  https://ckaynak.com/c-programlama-dili-recursive-bolme-islemi-cikartma-islemi-ile-ornegi-1565
C Programlama Dili Recursive Asal Sayı Kontrol Etme Örneği  https://ckaynak.com/c-programlama-dili-recursive-asal-sayi-kontrol-etme-ornegi-1570
C Programlama Dili Recursive OBEB (Ortak Katların En Büyüğü) Örneği  https://ckaynak.com/c-programlama-dili-recursive-obeb-ortak-katlarin-en-buyugu-ornegi-1574
C Programlama Dili Recursive OKEK (Ortak Katların En Küçüğü) Örneği https://ckaynak.com/c-programlama-dili-recursive-okek-ortak-katlarin-en-kucugu-ornegi-1577