// How to memoize a function. Also tests "static"
using namespace oadl;
proc main()
{
"fib(36) = ",
proc(n)
{
static factDict = nil;
if (factDict == nil) {
factDict = new Dict(0);
}
if (n < 2) {
return n;
}
else if (factDict[n] != nil) {
return factDict[n];
}
else {
var result;
result = (proc)(n-1) + (proc)(n-2);
factDict = factDict.reshape(factDict.length()+1);
factDict[n] = result;
return result;
}
}
(36),
"\n";
}