Rekurencja - jak wszyscy wiemy - jest jednym z tych problemów - że otulenie głowy wydaje się osiągnięciem „kamienia milowego” w podróży programistycznej.
Ale jeśli chodzi o faktyczne wykorzystanie go w rzeczywistych problemach - znajomość mechaniki rekurencji NIE wystarcza - należy także zrozumieć naturę problemów, w których rekurencja jest najbardziej odpowiednim rozwiązaniem.
Moje pytanie brzmi więc ...
- jakie są „wzorce problemów”, które wymagają rozwiązania rekurencji
- jest rekursją formą strategii „dziel i rządź” lub formą „ponownego wykorzystania kodu” - lub jest wzorzec projektowy sam w sobie
- czy możesz podać nam przykład rzeczywistego problemu, w którym rekurencja przychodzi na myśl jako natychmiastowe rozwiązanie
-- AKTUALIZACJA --
wiele odpowiedzi odnosi się do „prawdziwych problemów”, takich jak przemierzanie drzewa, silnia itp. Wolałbym „PRAWDZIWE prawdziwe problemy” - dam wam przykład ...
Mieliśmy DUŻĄ porcję tekstu (około 30 MB tekstu jako połączonej listy structs
) i musieliśmy stworzyć jego indeks do przeszukiwania pełnego tekstu. Musieliśmy zachować cały indeks w pamięci i ponownie indeksować tekst co 10 minut.
Co 10 minut porównujemy cały tekst (dwie połączone listy, linia po linii) z nowo wygenerowanym fragmentem tekstu - aby zobaczyć, który wiersz został zmieniony - a następnie ponownie indeksujemy tylko ten wiersz - w ten sposób moglibyśmy uniknąć konieczności ponownego indeksowania CAŁEGO tekstu. Pamiętaj - musieliśmy znaleźć punkty różnic między dwiema połączonymi listami o wielkości 30 MB.
Jeden z moich kolegów wymyślił fantastyczny program, który wykorzystywał rekurencję HEAVY do porównywania linii - a następnie zbierał pozycje, w których uchwyty różniły się w tablicy - tak, wiem, że to brzmi zagadkowo - jak tu może pomóc rekurencja - ale to zrobiło.
Chodzi o to - jak mógł zobaczyć, że problem ten można rozwiązać mądrze przy użyciu rekurencji?