şükela:  tümü | bugün
  • (bkz: recursive)
  • (bkz: #2493705)
  • kendini çağıran fonksiyon. gerekli olduğu durumlar olduğu gibi küçük bir döngüyle halledilebilen durumlar da vardır.
    şu şekilde çalışır
    (bkz: recursive function)
  • looplarla yapamadıgımız kimi hadiseleri yapmamıza yarayan, kullanımına alışınca hoş bir program yazdıgınızı zannetiren, programlama dillerinde (c,c++,java hede hödö) kanımca ogrenilmesi gereken fonksiyon türü.
  • spiral grafik verebilen fonksiyonlardır. doğadaki fraktal yapılarda bulunurlar.
  • programcılığın en zor anlaşılan kavramlarından biri. bunu en güzel türkiye'deki bürokrasiden örnek vererek anlatabilirim. recursive function kavramını anlayabilmek için önce function kavramını güzelce anlayalım. örneğin okuldan öğrenci belgenizi almak istiyorsunuz. ancak okul "sana öğrenci belgeni veririm, ama bana nüfus kayıt örneğini getireceksin" dedi. şimdi nüfus kayıt örneğini almak için nüfus'a gittik. nüfus "sana nüfus kayıt örneğini veririm ama bana ikametgah ilmuhaberini getireceksin" dedi. şimdi ikametgah ilmuhaberini almak için muhtara gittik. şimdilik bir ara verelim ve şimdiye kadar yaptığımız işlemleri function'larla ifade edelim:
    function okul()
    {
    if(nufus_kayit_ornegi()==true)
    return ogrenci_belgesi;
    }
    function nufus_kayit_ornegi()
    {
    if(ikametgah_ilmuhaberi()==true)
    return true;
    }
    function ikametgah_ilmuhaberi()
    {
    //işlemler...
    //buradaki işlemleri muhtarın yaptığı işler olarak düşünün.
    //muhtarımız bize ikametgah ilmuhaberini vermek için bizden herhangi bir belge istemiyor.
    return true;
    }
    ne şanslıyız ki muhtar bize ikametgah ilmuhaberini vermek için bizden herhangi bir belge istemiyor. muhtardan ikametgah ilmuhaberini aldık. aldığımız bu ikametgah ilmuhaberini nüfus'a verdik. nüfus bunun ardından bize nüfus kayıt örneğini verdi. aldık bu nüfus kayıt örneğini okula götürdük. son olarak okuldan da öğrenci belgesini aldık ve işlemlerimizi tamamladık. burada aslında diğer function'lara dallanma yaptık.

    şimdi recursive function'a örnek verelim. öğrenci belgemizi almak için okula gittik. okul "sana öğrenci belgeni veririm. ama bana öğrenci belgeni göstereceksin" dedi. bu sefer göstermek için okula tekrar öğrenci belgesi başvurusunda bulunduk. bu sefer okul tekrar "sana öğrenci belgeni veririm. ama bana öğrenci belgeni göstereceksin" dedi. eğer bir kontrol yapılmazsa bu döngü bu şekilde sonsuza kadar devam edecektir. döngünün sonsuza kadar devam etmesini engellemek için fonksiyonun içine bir kontrol koymalıyız. örneğin okul şöyle diyebilir: "okulumuzdan öğrenci belgesi almak için öğrenci belgenizi göstermek veya okulumuza 10 kez öğrenci belgesi başvurusunda bulunmanız gerekmektedir." yani burada fonksiyonun dışarısında bir değişken tanımlanacak ve her fonksiyona dallanma yaptığımızda bu değişkenin değeri bir artırılacak. yine fonksiyonun başında ilgili değişken 10'dan büyük mü küçük mü diye bakılacak. (fonksiyonun dışında tanımladığımız değişkenin ilk değeri sıfır olacak).

    not: burada okul öğrenci belgesini vermek için öğrenci belgesi yanında bir başka belge daha isteyebilir. önce öğrenci belgesini ister. öğrenci belgesini verdikten sonra bu sefer sağlık raporunu isteyebilir. burada gözden kaçırmamamız gereken nokta dallanma yaptığımız bütün ogrenci_belgesi() fonksiyonlarının da sağlık raporunu istemesidir. yani en içteki ogrenci_belgesi() fonksiyonu true döndürdüğünde bu en içteki fonksiyonu çağıran bir dıştaki fonksiyona da sağlık raporunu vermeliyiz. şimdiye kadar yaptığımız işlemleri fonksiyonlarla gösterecek olursak:

    var sayi=0;
    function ogrenci_bekgesi()
    {
    sayi++;
    if(sayi >= 10)
    return true;
    var a=ogrenci_belgesi();
    var b=saglik_raporu();
    if(a && b)
    return true;
    }
  • yazılımcıların api kullanmadan directory listing ya da directory indexing olayı için kullandıkları hoş fonksiyon, belleği beller bildiğin, döngülerin aksine (bkz: sende olanı sana takacağız) olan fonksiyondur. hayat kurtarabilir
  • fonksiyonel programlamanin olmazsa olmazidir. fonksiyonlarinizin dogrulugunun matematiksel tumevarim* yontemiyle kanitlanmasini kolaylastiran fonksiyon tipidir. her zaman verimsiz degildir, ozellikle fonksiyonel dillerde recursive fonksiyonlarin verimli hale getirilmesi uzerine yogunlasilmistir.