01ერთი და იგივე კითხვა, ისევ და ისევ
დავწეროთ ფიბონაჩი ყველაზე პირდაპირი გზით: fib(n) = fib(n-1) + fib(n-2), სადაც fib(0) = 0, fib(1) = 1. კოდი სწორია, მაგრამ საშინლად ნელია.
დავხატოთ fib(5)-ის გამოძახებები და მიზეზი მაშინვე ჩანს: fib(3) ორჯერ ითვლება, fib(2) სამჯერ, და ყოველი გამეორება თან მთელ თავის ქვეხეს მოათრევს. გამოძახებების რაოდენობა φⁿ ≈ 1.6ⁿ-ის მსგავსად იზრდება, ამიტომ fib(50) ათობით მილიარდ გამოძახებას აკეთებს.
ამასთან, განსხვავებული კითხვა მხოლოდ n + 1 არის: fib(0), fib(1), …, fib(n). რეკურსია რთულ საქმეს კი არ აკეთებს, ის ერთსა და იმავეს იმეორებს. ამას ქვეამოცანების გადაფარვა ჰქვია და ეს პირველი ნიშანია, რომ დინამიური პროგრამირება (დპ) დაგვეხმარება.