İçeriğe atla
CodeItRaw
Özyineleme & Böl-Yönet

Ders 2/3

Küçültmek her zaman "bir eksiği" demek değildir. Bir listeyi iki ucundan birer eleman soyarak da küçültebilirsin, ortadan ikiye bölüp yarısını atarak da. Hangi yolu seçtiğin, kaç çağrı yapılacağını belirler.

def find(values, key, lo, hi):
if lo > hi:
return -1
mid = (lo + hi) // 2
if values[mid] == key:
return mid
if values[mid] < key:
return find(values, key, mid + 1, hi)
return find(values, key, lo, mid - 1)
Sıralı listede arama: ortaya bak, aradığın büyükse sol yarının tamamını bırak. Liste kopyalanmıyor; yalnızca lo ve hi sınırları daralıyor. Her çağrı kalan kısmı yarıya indirdiği için bin eleman on çağrıda biter.

İki uçtan soymak da aynı kalıptır: uçlar uyuşuyorsa içeride kalan kısım için kendini çağır; uyuşmuyorsa cevap hemen bellidir. Taban durumu, geriye bir ya da sıfır eleman kalmasıdır.

Görevler

Görevler sırayla açılır. Hepsini çözünce sonraki ders açılır.

Bu dersin görevleri, önceki dersler bitince açılır. Anlatımı şimdiden okuyabilirsin.

  1. 01

    Ayna

    Fonksiyon

  2. 02

    İkili Arama

    Fonksiyon

Sırayı beklemeden çözmek istersen bütün problemler kilitsiz açık: Problemler listesi