C
Programlama Dili
DERS – 12


                Benim oğlum bina okur, döner döner yine okur

Şimdiye kadar başka fonksiyonları çağıran fonksiyonlara örnekler verdik. Şimdi ise kendini çağıran (recursive) fonksiyonları kavrayalım.

Recursive fonksiyonlar herhangi bir döngü (while, for, do while) kullanmadan kendisine bağlı olarak kullanılan prosedürdür.

ÖRNEK: Bir sayının faktöriyelini bulmak

Programı derleyice çalıştırdığımızda faktöriyeli bulunacak sayı olarak 4 girersek aşağıdaki işlemleri program uygular.

scanf(“%d”, &sayi); sayi değişkenine 4 atanır. int fakt = faktoriyel(sayi); ile int faktoriyel(int n) fonksiyonu çağrılır. sayi değişkeni n değişkenine atanır.

n<=1 mi?” sorgusu yapılır. 4 sayisi 1 den büyük olduğu için else faktor = n*faktoriyel(n-1); işlemi yapılır. faktor=4*faktoriyel(4-1) işlemiyle faktor=4*faktoriyel(3) sonucuna ulaşılır.

faktoriyel(3) ile int faktoriyel(int n) fonksiyonu çağrılır. n değişkenine 3 sayısı atanır. “n<=1 mi?” sorgusu yapılır, 3 sayısı 1den büyük olduğu için else faktor = n*faktoriyel(n-1); işlemi yapılır.

faktor=3*faktoriyel(2) sonucunda tekrar 2 için fonksiyon çağrılır. n=1 olana kadar bu devam eder. n=1 için “n<=1 mi?” sorgusu yapılır. n değeri(n=1) 1 e eşit olduğu için faktor=1 alınır. Böylece fonksiyonu yineliyerek (kendi içerisinde bir çeşit döngü oluşturarak) faktöriyelin hesaplanması sağlanmış olur. Aşağıdaki şekille daha iyi anlayacağınızı umuyorum.

ÖRNEK: Fibonacci sayıları

Finobacci serisi : 0, 1, 1, 2, 3, 5, 8, 13, 21, …

Tanım : 0 ve 1 ile başlar, sonraki sayılar kendinden önceki iki sayının toplamı ile oluşturulur.

Base Case : fibonacci(0) = 0 fibonacci(1) = 1

General Case : fibonacci(n) = fibonacci(n-1) + fibonacci(n-2)

Convergence : n azaltılarak base case’e yaklaşılır.

ÖRNEK: Üs alma