I already pointed out that performance issues are usually
irrelevant in the question of whether to choose an OO
design. However algorithms are
also often irrelevant
in whether to choose an OO design. Generally speaking you
can write the same algorithms in any programming paradigm.
OK, so some of them come more naturally in one paradigm
than another, but the ones that come most naturally in an
OO design are often not particularly efficient. Quite the
contrary in fact.
For instance your memoizing object is the same algorithm
as using an access function that memoizes its return.
And using Dominus' Memoize module takes less
setup work.
Now programming paradigms have a huge effect on overall
program design. They affect how easy it is to swap
out one algorithm for another (in obvious and not so
obvious ways). I am not saying that all paradigms are
created equal. (OTOH I think that which one is "best"
depends on circumstances.) But in general programming
people who think that raw performance is a good reason
for them to choose one paradigm over another are generally
wrong. And likewise decent paradigms are not
distinguished by what algorithms they can express.
(Now ease of expression is a different story...)