############################################################################ # # 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