Blame |
    Last modification |
    View Log
    | Download
  
  
-- fibonacci function with cache
 
 
 
-- very inefficient fibonacci function
 
function fib(n)
 
        N=N+1
 
        if n<2 then
 
                return n
 
        else
 
                return fib(n-1)+fib(n-2)
 
        end
 
end
 
 
 
-- a general-purpose value cache
 
function cache(f)
 
        local c={}
 
        return function (x)
 
                local y=c[x]
 
                if not y then
 
                        y=f(x)
 
                        c[x]=y
 
                end
 
                return y
 
        end
 
end
 
 
 
-- run and time it
 
function test(s,f)
 
        N=0
 
        local c=os.clock()
 
        local v=f(n)
 
        local t=os.clock()-c
 
        print(s,n,v,t,N)
 
end
 
 
 
n=arg[1] or 24          -- for other values, do lua fib.lua XX
 
n=tonumber(n)
 
print("","n","value","time","evals")
 
test("plain",fib)
 
fib=cache(fib)
 
test("cached",fib)