1-- fibonacci function with cache 2 3-- very inefficient fibonacci function 4function fib(n) 5 N=N+1 6 if n<2 then 7 return n 8 else 9 return fib(n-1)+fib(n-2) 10 end 11end 12 13-- a general-purpose value cache 14function cache(f) 15 local c={} 16 return function (x) 17 local y=c[x] 18 if not y then 19 y=f(x) 20 c[x]=y 21 end 22 return y 23 end 24end 25 26-- run and time it 27function test(s,f) 28 N=0 29 local c=os.clock() 30 local v=f(n) 31 local t=os.clock()-c 32 print(s,n,v,t,N) 33end 34 35n=arg[1] or 24 -- for other values, do lua fib.lua XX 36n=tonumber(n) 37print("","n","value","time","evals") 38test("plain",fib) 39fib=cache(fib) 40test("cached",fib) 41