blob: 908ea974363f321d0758aecdeb1d70bd8029e6cf (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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
|