Özyineleme - hepimizin bildiği gibi - bu sorunlardan biridir - kafanızı sarmak, programlama yolculuğunuzda bir "kilometre taşı" elde etmek gibi hissettirir.
Ancak, gerçek dünya problemlerinde bunu kullanmak söz konusu olduğunda - özyineleme mekaniğini bilmek yeterli DEĞİLDİR - özyineleme en uygun çözümün olduğu problemlerin doğasını da anlamak gerekir.
İşte benim sorum bu...
- özyineleme çözümünü gerektiren "sorun modelleri" nelerdir
- özyineleme bir "böl ve fethet" stratejisi veya "kodun yeniden kullanımı" biçimidir - ya da kendi başına bir tasarım modelidir
- bize özyinelemenin akılcı bir çözüm olarak akla geldiği gerçek dünya sorununa bir örnek verebilir misiniz?
-- GÜNCELLEME --
cevaplar bir sürü "gerçek sorunları" ağaç gezici, faktöriyel, vb atıfta bulunmaktadır. "GERÇEK gerçek sorunları" tercih ediyorum - size bir örnek vereyim ...
BÜYÜK bir metin mandreni (bağlantılı bir liste olarak yaklaşık 30 MB metin structs
) vardı ve tam metin araması için bir dizin oluşturmamız gerekiyordu. Dizinin tamamını bellekte tutmamız ve metni her 10 dakikada bir yeniden dizine eklememiz gerekiyordu.
Her 10 dakikada bir, metnin tamamını (iki bağlantılı liste, satır satır) yeni oluşturulan bir metin grubuyla karşılaştırırdık - hangi satırın değiştiğini görmek için - ve sonra yalnızca bu satırı yeniden dizine eklerdik - bu şekilde ENTIRE metnini yeniden endekslemek zorunda kalmazdık. Unutmayın - iki 30 MB bağlantılı liste arasındaki fark noktalarını bulmamız gerekiyordu.
Meslektaşlarımdan biri, hatları karşılaştırmak için AĞIR özyineleme kullanılan ve daha sonra aynaların bir dizide farklı olduğu yerleri toplayan harika bir program buldu - evet, şaşırtıcı geldiğini biliyorum - özyineleme burada nasıl yardımcı olabilir - ama o yaptı.
Mesele şu ki - bu sorunun ağır özyineleme kullanımı ile akıllıca çözülebileceğini nasıl görebilir?