CodeBlanks Logo Icon CodeBlanks

Çağrı ağacı

Recursive Fibonacci'nin tekrarlı çağrılarla verimsiz olduğunu öğrenirsin.

Çağrı ağacı

Recursive Fibonacci'nin çağrı ağacı, her düğümün iki çocuk yaptığı bir ikili ağaçtır. Aynı değerler defalarca hesaplanır.

Örneğin fib(5) çağrısı fib(3)'ü iki kez, fib(2)'yi üç kez hesaplar. Bu tekrar, üstel karmaşıklığın nedenidir.

Tekrar sorunu

Naive Fibonacci'nin en büyük sorunu, aynı alt problemleri tekrar tekrar hesaplamasıdır. fib(3) hem fib(4) hem fib(5) tarafından çağrılır.

Bu tekrar, daha ileri seviyede memoization ile çözülür. Hesaplanan değerler önbelleğe alınır ve tekrar hesaplanmaz.

Uygulama Fibonacci listesi

fib_list(n) yaz. n+1 elemanlı Fibonacci dizisi döndür. print(fib_list(5)) ile [0, 1, 1, 2, 3, 5] yazdır.

Başlangıç kodu

solution.py
def fib_list(n):
    # Fibonacci listesi

Örnek çözüm

solution.py
def fib_list(n):
    # Fibonacci listesi
    if n == 0:
        return [0]
    result = [0, 1]
    for i in range(2, n + 1):
        result.append(result[i-1] + result[i-2])
    return result
print(fib_list(5))

Beklenen çıktı

[0, 1, 1, 2, 3, 5]

Soru ve cevaplar

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

1 Çağrı ağacı: kavramları eşleştir

Kavram Anlamı
Çağrı ağacı İkili ağaç
Tekrar Üstel büyüme
fib(3) İki kez
Memoization Önbellek

2 Naive Fibonacci neden yavaştır?

  • Az çağrı yapar
  • Aynı alt problemleri tekrar hesaplar Doğru cevap
  • Bellek az kullanır
  • Döngü yok

Açıklama: Aynı alt problemleri tekrar hesaplar.

3 Tekrar

Soru
Aynı alt problem ____ hesaplanır.
Cevap
Aynı alt problem tekrar hesaplanır.

Açıklama: tekrar doğru.

Başlangıç bölümündeki tüm dersler