Python özyinelemeli fonksiyonlar

ekrangö
Defalarca bakmama rağmen anlamadım, bu kodun çalışma mantığını anlatabilirmisiniz?

kelime’ye girilen girdi printde çağrılan ters_çevir fonksiyonuna s parametresi yerine gidiyor.
eğer girdinin uzunluğu 1’den küçükse aynen girdiyi döndürüyor.
değilse:
döndür (girdinin 0. indeksi hariç kısmını tekrar döngüye sok) + girdinin 0. indeksi

burada resurcive denilmesinin sebebi üstteki satırda +'nın solundaki döngü bitene kadar bellekte çalıştırıyor.
mesela ahmet, girdimiz olsun. hmet kısmı tekrar döngüye girdi ama a’yı sağda tutarak yazdırdı.
hmet’den met kısmı tekrar döngüye girdi + ha oldu, hala ekrana yazdırılmadı özyineleyerek devam ediyor
et kısmı tekrar döngüye girdi + mha oldu.
t kısmı döngüye girdi + emha oldu
t uzunluğu 1’den küçük olduğu için aynen t verdi ve artık fonksiyon döngüsü bittiği için return edilebilir: temha

2 Beğeni

Fonksiyon “else:” içerisinde yer alan return komutunda kendisini tekrar çağırdığı için özyinelemeli fonksiyon olarak adlandırılıyor. onksiyon kendisini her çağrışında soldan bir harfi eksilterek çağırıyor. bunu da s[1:] ile yapıyor.
Örnek vermek gerekirse s[a:b] diyecek olursak, buradaki a değeri başlangıç indeks değerini ve b değeri de bitiş indeks değerini belirtir. İndeks değerinin 0’dan başladığını hesaba katacak olursak “ahmet” kelimesindeki harflerin indeks değerlerine göre sıralaması şu şekildedir:
0 - a
1 - h
2 - m
3 - e
4 - t
Burada “ahmet”[1:] bize “hmet” değerini verecektir. Çünkü başlangıç indeks değerini 1 olarak belirtmiş olduk.
Şimdi parametre olan s yerine “ahmet” girdiğimizde adım adım neler oluyor bunları gözlemleyelim.

  1. adımda return ters_cevir(“hmet”) + “a”
  2. adımda return (ters_cevir(“met”) + “h”) + “a”
  3. adımda return ((ters_cevir(“et”) + “m”) + “h”) + “a”
  4. adımda return (((ters_cevir(“t”) + “e”) + “m”) + “h”) + “a”
  5. adımda return (((“t”) + “e”) + “m”) + “h”) + “a”
    Şimdi şunu belirtelim ki, bu özyinelemeli fonksiyonlardaki return değerleri dallanarak ilerler. Burada oluşan dalları şu şekilde ifade edebiliriz,
    ((("t") + "e") + "m") + "h") + "a" = "temha"
    şeklinde dönecektir.
    Bunu matematikteki çarpanlara ayırma konusuyla da bağdaştırabilirsiniz.
    Mesela 24*3 = (12*2) * 3 = ((6*2)*2)*3 = (((3*2)*2)*2)*3 şeklinde ifade edilebilir.
3 Beğeni

teşekkür ederim:))))

1 Beğeni