diff options
Diffstat (limited to 'tests/closure/tfib50.nim')
-rw-r--r-- | tests/closure/tfib50.nim | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/tests/closure/tfib50.nim b/tests/closure/tfib50.nim new file mode 100644 index 000000000..21a4afa9a --- /dev/null +++ b/tests/closure/tfib50.nim @@ -0,0 +1,22 @@ +discard """ + output: "20365011074" +""" + +import tables + +proc memoize(f: proc (a: int): int): proc (a: int): int = + var previous = initTable[int, int]() + return proc(i: int): int = + if not previous.hasKey i: + previous[i] = f(i) + return previous[i] + +var fib: proc(a: int): int + +fib = memoize(proc (i: int): int = + if i == 0 or i == 1: + return 1 + return fib(i-1) + fib(i-2) +) + +echo fib(50) |