Özyinelemeli Fonksiyonlarda Takıldım

Merhaba. Fırat Özgül’ün kitabından kendi kendime python öğreniyorum. Harika bir kitap ve genelde çok iyi açıklıyor. Fakat özyinelemeli fonksiyonlarda aşağıdaki örnekte ikinci return’den sonraki kısmın nasıl çalıştığını anlayamadım. Acaba açıklayabilme imkânınız var mıdır? Şimdiden teşekkür ederim :pray:

Merhaba, hoş geldiniz.

Öncelikle, kodları resim olarak değil de, kod görünümünde paylaşırsanız daha iyi olur.

Sorunuza geçecek olursak:

def düz_liste_yap(liste):
    if not isinstance(liste, list):
        return [liste]
    elif not liste:
        return []
    else:
        return düz_liste_yap(liste[0]) + düz_liste_yap(liste[1:])
 
  
l = [[1, 2], [3, 4]]

print(düz_liste_yap(l))

Yukarıdaki kodların nasıl çalıştığını açıklamaya çalışayım:

  • düz_liste_yap(l) ile fonksiyonu, liste parametresi l olacak şekilde çağırdık.

  • l’nin tipi liste olduğu için else satırına gidildi.

  • liste’nin 0. indeksinde yer alan değer [1, 2]. Bu değer düz_liste_yap fonksiyonuna argüman olarak verildi ve fonksiyon tekrar çağrıldı. düz_liste_yap(liste[1:]) ifadesi için ise dördüncü maddeye bakın.

    • [1, 2] bir liste olduğu için, yine else durumuna gidildi. Bu listenin 0. indeksinde yer alan değer 1. Bu değer bir liste değil. O halde değer [1] şeklinde geri dönecek. [1, 2] listesinin ilk elemanı hariç geri kalan elemanları da düz_liste_yap fonksiyonuna parametre olarak verilmişti. O halde liste şuna benzeyecek [2]. Bu da bir liste olduğu için, else satırına gidilir. Bu listenin 0. indeksinde yer alan sayı 2. Ve bu değer bir sayı. O halde geri dönen değer [2] olacak. 2’yi de çıkardığımızda, geri kalan şey boş bir liste, bu durumda dönen değer, boş bir liste olur. Şu ana kadar [1] + [2] + [] geri döndü.
  • + operatörünün sağında yer alan ifade şuydu: düz_liste_yap(liste[1:]). Buradaki liste[1:] ifadesinin değeri [3, 4]. Ve 3. madde’nin alt maddesinde anlattığım aşamaların hepsi bu değerler için de tekrarlanır.

Ve sonuç olarak şöyle bir sonuç elde edersiniz.

[1] + [2] + [] + [3] + [4] + []. Bu da [1, 2, 3, 4] listesine eşittir.

2 Beğeni

Tam olarak aydınlatıcı oldu. Çok teşekkür ederim :pray: