repo.or.cz
/
lua.git
/
blob
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
log
|
graphiclog1
|
graphiclog2
|
commit
|
commitdiff
|
tree
|
refs
|
edit
|
fork
blame
|
history
|
raw
|
HEAD
Too many variables in an assignment may cause a C stack overflow. (7)
[lua.git]
/
test
/
fib.lua
blob
97a921b1322cc343810b2eb0b7de5559734d5045
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
)