summaryrefslogtreecommitdiff
path: root/ipl/packs/loadfuncpp/examples/factorials.icn
diff options
context:
space:
mode:
authorIgor Pashev <pashev.igor@gmail.com>2013-01-28 19:02:21 +0000
committerIgor Pashev <pashev.igor@gmail.com>2013-01-28 19:02:21 +0000
commitd78e6c19ff93964183950f846868ade625e6b537 (patch)
treef2d588a9646c8496db23d3fe868d7dce4f7dfa83 /ipl/packs/loadfuncpp/examples/factorials.icn
parentf944578414d5adc0c6c3fb22ad5808077444a410 (diff)
parentf627f77f23d1497c9e1f4269b5c8812d12b42f18 (diff)
downloadicon-d78e6c19ff93964183950f846868ade625e6b537.tar.gz
Merge tag 'upstream/9.5.0'
Upstream version 9.5.0
Diffstat (limited to 'ipl/packs/loadfuncpp/examples/factorials.icn')
-rw-r--r--ipl/packs/loadfuncpp/examples/factorials.icn27
1 files changed, 27 insertions, 0 deletions
diff --git a/ipl/packs/loadfuncpp/examples/factorials.icn b/ipl/packs/loadfuncpp/examples/factorials.icn
new file mode 100644
index 0000000..908ea97
--- /dev/null
+++ b/ipl/packs/loadfuncpp/examples/factorials.icn
@@ -0,0 +1,27 @@
+procedure main ()
+ every n := 1 to 10 do {
+ write (n, "! = ", memoized_factorial ( n ) );
+ }
+ n := 135; write(n, "! = ", memoized_factorial ( n ) );
+ n := 155; write(n, "! = ", memoized_factorial ( n ) );
+end
+procedure memoized_factorial ( k )
+ static results;
+ static k_limit;
+ static k_old;
+ initial {
+ results := [1];
+ k_limit := 10 ^ 5;
+ k_old := 1;
+ }
+ if (k < k_limit) then {
+ while (k > *results) do results := results ||| list(*results)
+ every n := (k_old + 1) to k do {
+ results[n] := n * results[n - 1];
+ }
+ k_old := k;
+ return results[k];
+ } else {
+ return ((k / &e) ^ n) * sqrt(2 * &pi * n);
+ }
+end