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