Özyinelemeyi Anlamak

Python'da Veri Yapıları ve Algoritmalar

Miriam Antona

Software engineer

Tanım

  • Kendini çağıran fonksiyon
  • Döngü kullandığımız durumların çoğu
    • döngüler yerine özyineleme kullanılabilir
  • İlk bakışta çok karmaşık görünen sorunları çözebilir
Python'da Veri Yapıları ve Algoritmalar

Örnek - faktöriyel

$n!$

Python'da Veri Yapıları ve Algoritmalar

Örnek - faktöriyel

$n!=n$ · $(n-1)$ · $(n-2)$ · $...$ · $1$

$5!=$ $5$ · $4$ · $3$ · $2$ · $1=120$

def factorial(n):
  result = 1
  while n > 1:
    result = n * result
    n -= 1
  return result
factorial(5)
120
Python'da Veri Yapıları ve Algoritmalar

Örnek - özyinelemeyle faktöriyel

$n!= n$ · $(n-1)!$

def factorial_recursion(n):
  return n * factorial_recursion(n-1)
  • Sonsuza dek çalışır!
Python'da Veri Yapıları ve Algoritmalar

Örnek - taban durumunu belirleme

  • Bir koşul ekleyin
    • algoritmanın sonsuza dek çalışmamasını sağlar
  • Faktöriyel taban durumu -> $n=1$
def factorial_recursion(n):
  if n == 1:

return 1
else:
return n * factorial_recursion(n-1)
print(factorial_recursion(5))
120
Python'da Veri Yapıları ve Algoritmalar

Özyineleme nasıl çalışır

  • Bilgisayar, fonksiyonları izlemek için bir yığın kullanır
    • Çağrı yığını
Python'da Veri Yapıları ve Algoritmalar

Özyineleme nasıl çalışır

  • factorial(5) başlar
  • factorial(5) bitmeden -> factorial(4) başlar
  • factorial(4) bitmeden -> factorial(3) başlar

Bir fonksiyonu temsil eden tek öğeli bir kuyruk resmi.

Python'da Veri Yapıları ve Algoritmalar

Özyineleme nasıl çalışır

  • factorial(5) başlar
  • factorial(5) bitmeden -> factorial(4) başlar
  • factorial(4) bitmeden -> factorial(3) başlar
  • factorial(3) bitmeden -> factorial(2) başlar

İki fonksiyonu temsil eden iki öğeli bir kuyruk resmi.

Python'da Veri Yapıları ve Algoritmalar

Özyineleme nasıl çalışır

  • factorial(5) başlar
  • factorial(5) bitmeden -> factorial(4) başlar
  • factorial(4) bitmeden -> factorial(3) başlar
  • factorial(3) bitmeden -> factorial(2) başlar
  • factorial(2) bitmeden -> factorial(1) başlar

Üç fonksiyonu temsil eden üç öğeli bir kuyruk resmi.

Python'da Veri Yapıları ve Algoritmalar

Özyineleme nasıl çalışır

  • factorial(5) başlar
  • factorial(5) bitmeden -> factorial(4) başlar
  • factorial(4) bitmeden -> factorial(3) başlar
  • factorial(3) bitmeden -> factorial(2) başlar
  • factorial(2) bitmeden -> factorial(1) başlar

Dört fonksiyonu temsil eden dört öğeli bir kuyruk resmi.

Python'da Veri Yapıları ve Algoritmalar

Özyineleme nasıl çalışır

  • factorial(1) biter
    • 1 döndürür
  • factorial(2) biter

Dört fonksiyonu temsil eden dört öğeli bir kuyruk resmi.

Python'da Veri Yapıları ve Algoritmalar

Özyineleme nasıl çalışır

  • factorial(1) biter
    • 1 döndürür
  • factorial(2) biter
    • 2 döndürür

Dört fonksiyonu temsil eden dört öğeli bir kuyruk resmi. Son fonksiyon, döndürdüğü değerle birlikte gösterilir.

Python'da Veri Yapıları ve Algoritmalar

Özyineleme nasıl çalışır

  • factorial(1) biter
    • 1 döndürür
  • factorial(2) biter
    • 2 döndürür
  • factorial(3) biter
    • 6 döndürür

Üç fonksiyonu temsil eden üç öğeli bir kuyruk resmi.

Python'da Veri Yapıları ve Algoritmalar

Özyineleme nasıl çalışır

  • factorial(1) biter
    • 1 döndürür
  • factorial(2) biter
    • 2 döndürür
  • factorial(3) biter
    • 6 döndürür
  • factorial(4) biter
    • 24 döndürür

İki fonksiyonu temsil eden iki öğeli bir kuyruk resmi.

Python'da Veri Yapıları ve Algoritmalar

Özyineleme nasıl çalışır

  • factorial(1) biter
    • 1 döndürür
  • factorial(2) biter
    • 2 döndürür
  • factorial(3) biter
    • 6 döndürür
  • factorial(4) biter
    • 24 döndürür
  • factorial(5) biter
    • 120 döndürür

Tek bir fonksiyonu temsil eden tek öğeli bir kuyruk resmi.

Python'da Veri Yapıları ve Algoritmalar

Özyineleme nasıl çalışır

  • factorial(1) biter
    • 1 döndürür
  • factorial(2) biter
    • 2 döndürür
  • factorial(3) biter
    • 6 döndürür
  • factorial(4) biter
    • 24 döndürür
  • factorial(5) biter
    • 120 döndürür

Boş bir kuyruğun resmi.

Python'da Veri Yapıları ve Algoritmalar

Dinamik programlama

  • Optimizasyon tekniği
  • Esas olarak özyinelemede uygulanır
  • Özyinelemeli algoritmaların karmaşıklığını azaltabilir
  • Şunlar için kullanılır:
    • Daha küçük alt sorunlara bölünebilen her problem
    • Alt sorunlar çakışır
  • Alt sorunların çözümleri kaydedilir, yeniden hesaplama önlenir
    • Bellekleme (memoization)
Python'da Veri Yapıları ve Algoritmalar

Hadi pratik yapalım!

Python'da Veri Yapıları ve Algoritmalar

Preparing Video For Download...