[Haskell-beginners] Recursion/dynamic programming optimization