mirror of
				https://github.com/thunderbrewhq/thunderbrew
				synced 2025-10-31 00:06:05 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			41 lines
		
	
	
		
			605 B
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			605 B
		
	
	
	
		
			Lua
		
	
	
	
	
	
| -- 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)
 | 
