Rozdział 9
Rozdziały poprzednie (szczególnie 2 i 5) dostarczyły nam interesujących narzędzi programistycznych. Zapoznaliśmy się z wieloma ciekawymi strukturami danych i przede wszystkim nauczyliśmy się posługiwać technikami rekurencyjnymi, stanowiącymi bazę nowoczesnego programowania. Zasadnicza rola rekuren-cji w procesie koncepcji programów nie była specjalnie eksponowana, koncentrowaliśmy się bowiem na próbach dokładnego zapoznania się z tym mechanizmem od strony „technicznej”.
W rozdziale niniejszym akcent położony na stosowanie rekiirencji będzie o wiele silniejszy, gdyż większość prezentowanych w nim metod swoje istnienie zawdzięcza właśnie tej technice programowania.
Tematyka tego rozdziału jest nieco przewrotna i łatwo może nieuważnego odbiorcę sprowadzić na manowce. Będziemy się bowiem zajmowali tzw. technikami (lub też inaczej: metodami) programowania, mającymi charakter niesłychanie ogólny i sugerującymi możliwość programowego rozwiązania niemal wszystkiego, co nam może tylko przyjść do głowy. Podawane algorytmy (a raczej ich wzorce) zostaną bowiem ilustrowane bardzo różnorodnymi zadaniami i generalnie rzecz biorąc będą dostarczać urzekająco efektownych rezultatów. Co więcej, będzie się wręcz wydawać, że dostajemy do ręki uniwersalne recepty, które automatycznie spowodują zniknięcie wszelkich nierozwiązywalnych wcześniej zadań... Czytelnik domyśla się już zapewne, że bynajmniej nie będzie to prawdą. Złudzenie, któremu uleglibyśmy (gdyby nie niniejsze ostrzeżenie), wyniknie z dobrze dobranych przykładów, które wręcz wzorcowo będą pasować do aktualnie omawianej metody. W ogólnym jednak przypadku rzeczywistość będzie o wiele bardziej skomplikowana i próby stosowania tych technik programowania jako uniwersalnych „przepisów kucharskich” nie powiodą się. Czy ma to oznaczać, że owe metody są błędne? Oczywiście nie, tylko wszelkie usiłowania „bezmyślnego” ich zastosowania na pewno spalą na panewce, o ile nie dokonamy adaptacji metody do napotkanego problemu algorytmicznego.