Recursive fonksiyon açıklarmısınız?

def eleman_ekleyici(eleman, liste_listesi): # liste icindeki her listeye elemani ekler

    if liste_listesi == []:

        return []

    else:

        return [liste_listesi[0] + [eleman]] + eleman_ekleyici(eleman, liste_listesi[1:])





def altKumeler(liste):

    if len(liste) == 0:

        return [[]]

    else:

        return altKumeler(liste[:-1]) + eleman_ekleyici(liste[-1], altKumeler(liste[:-1]))

# ornek

# print(sorted(altKumeler(["a","b","c"])))

# >>> [[], ['a'], ['a', 'b'], ['a', 'b', 'c'], ['a', 'c'], ['b'], ['b', 'c'], ['c']]

eleman ekleyicide sıkıntyı yok ama sorun şu altKumeler fonksiyonunun nasıl bir mantıkla çalıştığını tam olarak kavrayamadım anlatırmısınız

Iki fonksiyon da ayni sekilde calisiyor; biri bastan digeri kictan calisiyor sadece.

1 Beğeni

Maalesef anlayamadım daha açıklayıcı olabilir misiniz mesela [a,b,c] için fonksiyon nasıl çalışıyor

Şu örnek acaba anlamanıza yardımcı olur mu?

def ic_ice_listeleri_yok_et(arr: list = []):
    result = []
    for i, j in enumerate(arr):
        if isinstance(j, list):
            return arr[:i] \
                + ic_ice_listeleri_yok_et(j) \
                + ic_ice_listeleri_yok_et(arr[i + 1:])
        else:
            result.append(j)  
    return result
    
    
a = [["a"], "b", [[["c"]]], "d"]
        
print(ic_ice_listeleri_yok_et(a))

Öz-yinelemede yapılan işlem aslında şu:

  • Eğer listede sırası gelen elemanın tipi bir listeyse o elemanın sırasına kadar olan elemanları olduğu gibi al
  • Tipi liste olan elemanı öz-yinelemeli bir şekilde al
  • Geri kalan elemanlar da bir liste içinde olacağı için onları da öz-yinelemeli bir şekilde al ve sonucu geri döndür.

yardımlarınız için teşekkürler

Böyle durumlarda belirli yerlerde ekrana değişkenlerinizi yazarsanız olan biteni anlamanız da kolaylaşır diye düşünüyorum:

from copy import deepcopy

def eleman_ekleyici(eleman, liste_listesi): # liste icindeki her listeye elemani ekler
    if liste_listesi == []:
        return []
    else:
        liste_listesi = deepcopy(liste_listesi)
        for i in liste_listesi: # liste listesi?
            i.append(eleman)
        print("eleman ekleyici fonksiyonunun sonucu:", liste_listesi)
        return liste_listesi
##        return [liste_listesi[0] + [eleman]] + eleman_ekleyici(eleman, liste_listesi[1:])
    

def altKumeler(liste):
    print("altKumeler fonksiyonunda özyineleme başladı:", liste)
    if liste:
        r = altKumeler(liste[:-1])
        sonuç = r + eleman_ekleyici(liste[-1], r)
        print("altKumeler fonksyonunda özyinelemeden çıkılıyor:", sonuç)
        return sonuç
    else:
        print("altKumeler fonksyonunda özyinelemeden çıkılıyor:", [[]])
        return [[]]



print("\n", sorted(altKumeler(["a","b","c"])), sep = "")

1 Beğeni