Fonksiyon içerisinde aynı fonksiyonu çağırma

Başlatan Mucit23, 05 Ağustos 2014, 12:26:51

Mucit23

Merak ettim denedim.

STM32f10x de bir fonksiyon içerisinde aynı fonksiyon çağırdım. Program dondu. Böyle bir durumda standart C nasıl davranır

Gökhan BEKEN

bunun arm ile ilgisi yok, sonsuz döngüye sokmuşsun.
recursive fonksiyonları araştır bence.
Özel mesaj okumuyorum, lütfen göndermeyin.

Mucit23

o halde Basla : Goto Basla gibi birşey oluyor galiba.

Burak B

Bu duruma "Recursive Function" deniyor. Bir sonlandırıcı olmadan fonksyion kendini sürekli çağırırsa stack taşması veya hafıza problemleri gibi sorunlar oluşana kadar sonsuz döngüye girer. Bu tip fonksiyonlara en temel örnek faktöriyel hesaplamadır.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

erpay

Recursive fonskiyonlarda bir dip noktası olur, büyük ihtimal sizin fonksiyonunuzda bu olmadığı için sonsuz döngüye girdi. ByteMaster'ın dediği gibi bu tarz fonksiyonları öğrenmek için en ideali faktöriyel fonksiyonu.

kimlenbu


Tagli

Ufak bir not: Faktöriyel fonksiyonu bunları öğrenmek için ideal ama aslında gerçek kullanım için kötü bir örnek. Teorik olarak, recursion ile yazılabilen her program normal döngülerle de yazılabilir. Ama elbette recursion ile yazmak programcı için çok daha kolaydır; okunması, anlaşılması ve bakımı kolay kod yazılmasını sağlar. Ama genelde bilgisayarın performansını düşürür. Ben genelde veri yapılarını içinde dolaşırken (ağaçlar mesela) kullanıyorum.

Daha uçuk bir örnek Fibonacci sayılarıdır. Bunu recursion ile yazarsanız, aynı sayıların tekrar tekrar hesaplandığını görürsünüz. Öğrenme için güzel bir örnek, uygulama için ise berbat bir örnektir.
Mesela fb(5)'i bulalım.
                       /             fb(5)            \
             /     fb(4)    \                    /  fb(3)  \
      /  fb(3) \          fb(2)             fb(2)            fb(1)
  fb(2)         fb(1)

Görüldüğü üzere fb() fonksiyonu aynı sayılar için tekrar tekrar çağrılıyor.
Gökçe Tağlıoğlu