summary refs log tree commit diff stats
path: root/tests/closure/tfib50.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/closure/tfib50.nim')
-rw-r--r--tests/closure/tfib50.nim22
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)