Subversion Repositories WoWGM

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3 tristanc 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)