CodeBlanks Logo Icon CodeBlanks

Stack veya recursion

DFS'nin stack ya da recursion ile uygulandığını öğrenirsin.

Stack veya recursion

DFS, yığın (stack) ile açıkça ya da recursion ile örtülü uygulanır. Recursion, çağrı yığınını kullanır.

Her ikisi de LIFO davranışını verir; seçim stiline bağlıdır ve sonuç aynı kalır.

Recursion daha kısa okunur; yığın ise derin graph'larda taşmayı önler; pratikte tercih edilir.

Recursion tabanı

Recursive DFS'de taban durum (base case) ziyaret kümesidir: düğüm zaten ziyaret edilse çağrı hemen döner.

Sonsuz döngüyü önlemek için bu kontrol şarttır; her düğüm yalnız bir kez işlenir.

Taban durum, recursive çağrıyı durdurur ve stack overflow riskini azaltır; bu yüzden önemlidir.

Uygulama Recursive DFS

dfs_rec(graph, node, visited) adlı recursive fonksiyon yaz. Ziyaret sırasını visited listesine ekle. v=[]; dfs_rec({0: [1, 2], 1: [0, 3], 2: [0, 3], 3: [1, 2]}, 0, v); print(v) ile [0, 1, 3, 2] yazdır.

Başlangıç kodu

solution.py
def dfs_rec(graph, node, visited):
    # Recursive DFS uygula

Örnek çözüm

solution.py
def dfs_rec(graph, node, visited):
    # Recursive DFS uygula
    if node not in visited:
        visited.append(node)
        for nb in graph[node]:
            dfs_rec(graph, nb, visited)
v = []
dfs_rec({0: [1, 2], 1: [0, 3], 2: [0, 3], 3: [1, 2]}, 0, v)
print(v)

Beklenen çıktı

[0, 1, 3, 2]

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Recursion çıktısı

Soru
def dfs(graph, node, visited):
    if node in visited:
        return ____
Cevap
def dfs(graph, node, visited):
    if node in visited:
        return None

Açıklama: None doğru.

2 Stack veya recursion: kavramları eşleştir

Kavram Anlamı
recursion Kendini çağırır
stack LIFO
taban Dön
visited Küme

3 Recursion DFS'de çağrı yığını ne işe yarar?

  • Hash tablosu olur
  • Kuyruk olur
  • Heap olur
  • Örtük yığın olur Doğru cevap

Açıklama: Örtük yığın olur.

Orta seviye bölümündeki tüm dersler