Son lab dersimizde bizden main fonksiyonu recursive
yapmamız isteniyordu. Kendi yazdığımız main fonksiyonun içinde bir static
integer "count" tanımlayıp, bunu da "1"e initialize edecektik.
Daha sonra bu değişkeni ekrana bastırıp sonra da postincrement edecektik. Algoritma;
#include <stdio.h>
int main()
{
     static int count=1;
     printf("%d ", count);
     count++;
     main();
     return 0;
}
ÅŸeklinde oldu. Kodu execute ettiÄŸimde program 1'den baÅŸlayarak count'u ekrana
basmaya başladı.Ta ki count 12316 değerini alıncaya kadar. 12316 değerine ulaştığında
program sonlandı. "Neden 12316?" diye düşünüyordum.
Değişkeni integer olarak tanımladığımdan olamazdı çünkü integer'ın
son değeri 32767'dir. Aklıma "Acaba RAM'in kapasitesinden dolayı
olabilir mi?" sorusu geldi ve bunu anlamak için yazdığım algoritmanın
içine 5 tane daha integer değişken tanımladım. Algoritma;
#include <stdio.h>
int main()
{
     static int count=1;
     int a=0, b=0, c=0, d=0, e=0;
     printf("%d ", count);
     count++;
     main();
     return 0;
}
şeklinde oldu. Kodu execute ettiğimde gördüm ki bu sefer de 9948'e
kadar basıp program sonlandı. Haklıydım. Yeni tanımladığım değişkenler RAM'de
daha da fazla yer işgal ettiği için bu sefer count 9948'e kadar
ekrana basılabilmişti. Kısacası main recursive yaptığınızda belli bir değere kadar
RAM'in kapasitesine göre değişkeninizin değeri artırılabiliyor. RAM, değişkenin
yeni değerini tutamadığı için ise program sonlanıyor. Buna bir de "stack
overflow"'u eklediğinizde algoritmanızın sonlanması kaçınılmaz oluyor.
Etiket(ler): c, main recursion, recursive