Berechenbarkeitstheorie/Alternative Berechnungsmodelle

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Scheme</language>


== Theorie der rekursiven Funktionen ==

=== Primitiv-rekursive Funktionen ===

==== Sudan-Funktion ====

Der rumänische Mathematiker ''Gabriel Sudan'' (14.04.1899 - 22.06.1977) - wie ''Ackermann'' ebenfalls ein Schüler von David Hilbert - hat 1927 eine total berechenbare jedoch nicht primitiv rekursive Funktion publiziert. Sie ist folgendermaßen definiert.

$\begin{eqnarray*}
  F_0(x,y) &=& x+y \\
  F_{n+1}(x,0) &=& x,\ n\geq 0 \\
  F_{n+1}(x,y+1) &=& F_n(F_{n+1}(x,y),F_{n+1}(x,y)+y+1),\ n\geq 0
\end{eqnarray*}$


Beispiel: $F_1(3,2)=16$

$\begin{eqnarray*}
  F_1(3,2) &=& F_0(F_1(3,1), F_1(3,1)+1+1) \\
  F_1(3,1) &=& F_0(\underbrace{F_1(3,0)}_{3}, \underbrace{F_1(3,0)}_{3}+0+1) \\
           &=& F_0(3,4) = 3+4 = 7\\
  F_1(3,2) &=& F_0(7,9)=7+9=16 \\
\end{eqnarray*}$


Berechnen Sie $F_1(3,3)=35, F_1(3,4)=74$ und $F_2(2,1)=27$ mit Hilfe der folgenden Prozedur. Beachten Sie das Aufrufmuster: Zur Berechnung von $F_n(x,y)$ lautet der zugehörigen Aufruf <tt>(f n x y)</tt>.

<code id="4fd985fd76323">
(define f
  (lambda (n x y)
    (cond
      ((= n 0) (+ x y))
      ((= y 0) x)
      (else
       (f (- n 1) (f n x (- y 1)) (+ (f n x (- y 1)) y))))))
</code>
<run id="4fd985fd7638d">(f 1 3 2)</run>