diff options
Diffstat (limited to 'ipl/procs/recrfncs.icn')
-rw-r--r-- | ipl/procs/recrfncs.icn | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/ipl/procs/recrfncs.icn b/ipl/procs/recrfncs.icn new file mode 100644 index 0000000..80a0dbc --- /dev/null +++ b/ipl/procs/recrfncs.icn @@ -0,0 +1,73 @@ +############################################################################ +# +# File: recrfncs.icn +# +# Subject: Procedures for recursive functions +# +# Author: Ralph E. Griswold +# +# Date: December 5, 1995 +# +############################################################################ +# +# This file is in the public domain. +# +############################################################################ +# +# These procedures implement commonly referenced ``text-book'' +# recursively defined functions. +# +# acker(i, j) Ackermann's function +# fib(i) Fibonacci sequence +# g(k, i) generalized Hofstader nested recurrence +# q(i) chaotic sequence +# +############################################################################ +# +# See also: fastfncs.icn, iterfncs.icn, and memrfncs.icn +# +############################################################################ +# +# Links: numbers +# +############################################################################ + +link numbers +procedure acker(i, j) + + if i = 0 then return j + 1 + if j = 0 then return acker(i - 1, 1) + else return acker(i - 1, acker(i, j - 1)) + +end + +procedure fib(i) + + if i = (1 | 2) then return 1 + + else return fib(i - 1) + fib(i - 2) + +end + +procedure g(k, n) + local value + static psi + + initial psi := 1.0 / &phi + + if n = 0 then return 0 + + value := 0 + + value +:= floor(psi * floor((seq(0) \ k + n) / real(k)) + psi) + + return value + +end + +procedure q(i) + + if i = (1 | 2) then return 1 + else return q(i - q(i - 1)) + q(i - q(i - 2)) + +end |