Özyinelemeli Fonksiyonlarda Takıldım

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