]>
Commit | Line | Data |
---|---|---|
21d3294c | 1 | -- fibonacci function with cache |
2 | ||
3 | -- very inefficient fibonacci function | |
4 | function 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 | |
11 | end | |
12 | ||
13 | -- a general-purpose value cache | |
14 | function 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 | |
24 | end | |
25 | ||
26 | -- run and time it | |
27 | function 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) | |
33 | end | |
34 | ||
35 | n=arg[1] or 24 -- for other values, do lua fib.lua XX | |
36 | n=tonumber(n) | |
37 | print("","n","value","time","evals") | |
38 | test("plain",fib) | |
39 | fib=cache(fib) | |
40 | test("cached",fib) |