Özyinelemeli (Recursive) Fonksiyonlar hk. destek

def ters_çevir(s):
    if len(s) < 1:
        return s
    else:
        ters_çevir(s[1:])
        print(s[0])

ters_çevir('istihza')

örneğinde çıktımız;

a
z
h
i
t
s
i

olarak veriliyor. Ancak nasıl ters çevrildi anlamadım.

   else:
            ters_çevir(s[1:])
            print(s[0])

burada print(s[0]) satırına gelmeden sürekli dilimlenerek fonksiyon dönmüyor mu?

ters_çevir fonksiyonunun 4. satırına gelindiğinde s'in 1. indisinden başlayarak, tamamı alınıyor ve ters_çevir fonksiyonuna argüman olarak veriliyor, print ifadesine geçilmiyor. Son çağrıdaki s[0], a olduğu için, önce a ekrana yazdırılıyor, bu çağrıdan önceki çağrının s[0] değeri z olduğu için sonra z yazılıyor.

Yani sıralama çağrılara göre şöyle değişiyor:

# 1. çağrı

print("i")

# 2. çağrı

print("s") -> print("i")

# 3. çağrı

print("t") -> print("s") -> print("i")

# 4. çağrı

print("i") -> print("t") -> print("s") -> print("i")

# 5. çağrı

print("h") -> print("i") -> print("t") -> print("s") -> print("i")

# 6. çağrı

print("z") -> print("h") -> print("i") -> print("t") -> print("s") -> print("i")

# 7. çağrı

print("a") -> print("z") -> print("h") -> print("i") -> print("t") -> print("s") -> print("i")
1 Beğeni
def ters_çevir(s):
    if not s:
        return s
    else:
        print(s)
        return s[-1] + ters_çevir(s[:-1])

print(ters_çevir('istihza'))


def ters_çevir(s):
    if len(s) < 1:
        return s
    else:
        return ters_çevir(s[1:]) + s[0]
        

print(ters_çevir('istihza'))

bu iki koda baktığımızda; return ters_çevir(s[1:]) + s[0] soldan sağa doğru silme yaparak tersten yazdırırken , return s[-1] + ters_çevir(s[:-1]) sağdan sola doğru silip yine tersten yazdırıyoruz. soldan sağa silip tersten yazdırmayı anladım da diğerinde nasıl s[-1] ile başlıyoruz anlamadım. Açıklayabilir misiniz ?

En sondaki karakteri en başa alıyor.

>>> def ters_çevir(s):
    if not s:
        return s
    else:
        print(s[-1])
        return s[-1] + ters_çevir(s[:-1])

>>> print(ters_çevir('istihza'))
a
z
h
i
t
s
i
azhitsi
>>> 
1 Beğeni
def düz_liste_yap(liste):
    if not isinstance(liste, list):
        return [liste]
    elif not liste:      
        return []
    else:
        print(liste[0],liste[1:])
        return düz_liste_yap(liste[0]) + düz_liste_yap(liste[1:])

l = [1, 2, 3, [4, 5, 6], [7, 8, 9, [10, 11], 12], 13, 14]

print(düz_liste_yap(l))

return düz_liste_yap(liste[0]) + düz_liste_yap(liste[1:]) burada iç içe olduğu için karmaşık geldi. mantığı nedir acaba ?