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 -1mid = (lo + hi) // 2if values[mid] == key:return midif values[mid] < key:return find(values, key, mid + 1, hi)return find(values, key, lo, mid - 1)
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.