Ackermann-Funktion

Die Ackermannfunktion ist eine 1926 von Wilhelm Ackermann gefundene, extrem schnell wachsende mathematische Funktion, mit deren Hilfe in der theoretischen Informatik Grenzen von Computer- und Berechnungsmodellen aufgezeigt werden können. Heute gibt es eine ganze Reihe von Funktionen, die als Ackermannfunktion bezeichnet werden. Diese weisen alle ein ähnliches Bildungsgesetz wie die ursprüngliche Ackermannfunktion auf und haben auch ein ähnliches Wachstumsverhalten.

Inhaltsverzeichnis

Entstehungsgeschichte

1926 vermutete David Hilbert, dass jede berechenbare Funktion primitiv-rekursiv sei. Vereinfacht bedeutet dies, dass sich jede durch einen Computer berechenbare Funktion aus einigen wenigen, sehr einfachen Regeln zusammensetzen lässt und dass sich die Dauer der Berechnung im Voraus abschätzen lässt. Dies trifft auf nahezu alle in der Praxis vorkommenden Funktionen zu.

Ebenfalls 1926 konstruierte Ackermann eine Funktion, die diese Vermutung widerlegt, und veröffentlichte sie 1928. Ihm zu Ehren wird diese Funktion heute Ackermannfunktion genannt. Sie kann von einem Computer in endlicher Zeit ausgewertet werden, ist aber nicht primitiv-rekursiv.

1955 konstruierte Rózsa Péter eine vereinfachte Version, die die gleichen Eigenschaften besitzt. Diese Funktion, gelegentlich auch als Ackermann-Péter-Funktion bezeichnet, wird heute vorwiegend benutzt.

Idee

Man betrachtet die Folge a+b, a\cdot b, a^b, \ldots. Hierbei wird bei jedem Folgeglied die Operation des vorigen Folgeglieds (b − 1) mal auf a angewandt, also a\cdot b ist gerade a+a+\ldots +a, wobei die Variable a b-mal vorkommt und so weiter. Die Idee hinter der Ackermannfunktion ist es, diese Folge als Funktion aufzufassen.

Beispiel: Setzt man in obiger Folge a = 2 und b = 4, so erhält man die Folge: 6, 8, 16, 256, 2^{2^{.^{.^{.^{2}}}}} (mit 256 Zweien), ..., die man auch die Ackermannfunktion zu a = 2 und b = 4 nennt. Die letzte aufgeführte Zahl ist bereits wesentlich größer als die geschätzte Anzahl der Atome im gesamten Weltall.

Die Ackermannfunktion, notiert als φ, ist also eine Funktion, die die folgenden Gleichungen erfüllt:

\varphi(a, b, 0) = b+1\,
\varphi(a, b, 1) = a \cdot b
\varphi(a, b, 2) = a^b\,
\ldots

Ab der vierten Zeile können die Funktionswerte nicht mehr mit herkömmlichen Operatoren formuliert werden; man braucht erweiterte Notationen, wie beispielsweise den Hyper-Operator.

Definition und Varianten

Die Ackermannfunktion definiert man üblicherweise rekursiv, d. h., man macht für einige Anfangswerte explizite Angaben und gibt eine Anleitung (das Rekursionsschema), wie man weitere Funktionswerte aus den bereits berechneten erhält.

Definition von Ackermann

Ackermann selbst definierte die Funktion auf recht umständliche Weise, gab aber kurz darauf die folgende äquivalente Definition an.

\varphi(a, b, 0)=b+1\,
\varphi(a, 0, n+1)=\psi(a, n)\,
\varphi(a, b+1, n+1)=\varphi(a, \varphi(a, b, n+1), n)\,

Dabei ist \psi\left(a, n\right) eine weitere Funktion, die Ackermann nicht weiter beschrieb. Sie liefert die Startwerte a+0, a\cdot 0, a^0, \ldots:


\psi(a, n)=\begin{cases}
  a,  & \text{wenn } n=0\\
  0,  & \text{wenn } n=1\\
  1,  & \text{wenn } n > 1
\end{cases}
Beispiele:
  • Möchte man φ(4,3,0) berechnen, so kann man die erste Zeile der Definition anwenden und erhält direkt: φ(4,3,0) = 3 + 1 = 4.
  • Möchte man φ(4,0,3) berechnen, so kann man die zweite Zeile anwenden und erhält: φ(4,0,3) = ψ(4,2) = 1. Man beachte, dass in diesem Fall n den Wert 2 hat, da auf der linken Seite der Definition n + 1 steht.
  • Wenn weder das zweite noch das dritte Argument 0 ist, verwendet man die dritte Zeile der Definition. Beispielsweise φ(4,1,3) = φ(4,φ(4,0,3),2). Setzt man φ(4,0,3) = 1 aus dem vorigen Beispiel ein, erhält man φ(4,1,2). Jetzt kann man wieder die dritte Zeile anwenden, und dann zweimal die zweite. Alles zusammen ergibt:
\varphi(4, 1, 3)\, =\varphi(4, \varphi(4, 0, 3), 2)\,
=\varphi(4, 1, 2)\,
=\varphi(4, \varphi(4, 0, 2), 1)\,
=\varphi(4, 0, 1)\,
=4\,

Wenn man vom Wachstum der Ackermannfunktion spricht, meint man oftmals die Funktion f\left(n\right) := \varphi(n, n, n).

Definition von Péter

Rózsa Péter definierte 1955 eine einfachere Version der Ackermannfunktion, die nur zwei Parameter besitzt und zudem ohne die Hilfsfunktion ψ auskommt:

\textrm{a}(0, m) = m+1\,
\textrm{a}(n+1, 0) = \textrm{a}(n, 1)\,
\textrm{a}(n+1, m+1) = \textrm{a}(n, \textrm{a}(n+1, m))\,

Auch hier meint man im Zusammenhang mit Wachstumsuntersuchungen oftmals die Funktion f(n): = a(n,n), wenn man von der Ackermannfunktion spricht.

Aus dieser Definition ist nicht sofort ersichtlich, dass die Funktion für alle nicht negativen, ganzzahligen n und m definiert ist. Das ergibt sich jedoch daraus, dass in jedem Schritt, entweder m verringert oder aber m erhöht und n verringert wird. Jedes Mal, wenn m Null erreicht, wird n verringert, also muss auch n irgendwann Null erreichen, und dann liefert die erste Zeile der Definition den Funktionswert. Zu beachten ist allerdings, dass es bei einer Verringerung von m keine obere Schranke für das Wachstum von n in den folgenden Funktionsaufrufen gibt.

Bedeutung in der theoretischen Informatik

Wie eingangs schon erwähnt, erfand Ackermann diese Funktion als Beispiel einer Funktion, die nicht primitiv-rekursiv ist, aber berechenbar. Dies ist auch heute noch das wichtigste Anwendungsgebiet der Ackermannfunktion.

Auf der Suche nach den Grenzen von Computern stößt man sehr schnell auf den Begriff der berechenbaren Funktionen. Das sind all die Funktionen, für deren Auswertung man einen Algorithmus angeben kann, also alle Funktionen, die ein Computer (insbesondere eine Turingmaschine) berechnen kann. Diese Definition stellt einen sehr schnell vor ein Problem, wenn man von einer konkreten Funktion entscheiden möchte, ob sie berechenbar ist. Findet man einen Algorithmus, der die Funktion berechnet, so ist sie offensichtlich berechenbar. Andernfalls ist ungewiss, ob die Funktion wirklich nicht berechenbar ist oder ob es zwar einen Algorithmus gibt, man ihn aber nicht gefunden hat.

Aus diesem Grund sucht man nach alternativen Definitionen, mit denen man einen solchen Nachweis einfacher führen kann. Ein erster Ansatz hierfür waren die primitiv-rekursiven Funktionen. Dies sind Funktionen, die sich durch einige wenige Regeln aus sehr einfachen Funktionen zusammensetzen lassen.

Einige Zeit vermutete man, dass alle berechenbaren Funktionen primitiv-rekursiv sind, mit den primitiv-rekursiven Funktionen also ein Werkzeug zur Lösung des oben geschilderten Problems gefunden sei. Diese Hoffnung zerstörte jedoch die Ackermannfunktion, von der man nachweisen kann, dass sie berechenbar, aber nicht primitiv-rekursiv ist. (Siehe nachfolgenden Expertenabschnitt.)

Führt man auf der Klasse der primitiv-rekursiven Funktionen eine weitere Konstruktionsregel, die sogenannte µ-Rekursion, ein, erhält man eine größere Klasse ebenfalls berechenbarer Funktionen, die die Ackermannfunktion enthält. Man nimmt an, dass diese Klasse der µ-rekursiven Funktionen der Klasse der intuitiv berechenbaren Funktionen entspricht (Church'sche These).

Beweis

Der Beweis, dass die Ackermannfunktion berechenbar ist, aber nicht primitiv-rekursiv, nutzt im Wesentlichen aus, dass die Ackermannfunktion stärker wächst als jede primitiv-rekursive Funktion.

Beweisskizze zur Behauptung, dass die Ackermannfunktion nicht primitiv-rekursiv ist:

  • Als erstes definiert man zu jeder primitiv-rekursiven Funktion g, eine Funktion
    f_g(n):=\max\{g(n_1, \ldots, n_k):\sum_{i=1}^{k}n_i\leq n\}
    Diese Funktion gibt das Maximum an, das man mit g erreichen kann, wenn die Summe der Argumente n nicht überschreitet.
  • Sodann zeigt man durch strukturelle Induktion über den induktiven Aufbau der primitiv-rekursiven Funktionen, dass es zu jeder primitiv-rekursiven Funktion g eine natürliche Zahl k gibt, sodass für alle n \geq k gilt: fg(n) < a(k,n). Anschaulich zeigt dies, dass die Ackermannfunktion stärker wächst als jede primitiv-rekursive Funktion.
  • Damit beweist man dann, wie folgt, dass die Ackermannfunktion nicht primitiv-rekursiv ist:
    Angenommen, a(k,n) sei primitiv-rekursiv, dann auch g(n): = a(n,n). Nach der Vorbemerkung gibt es aber ein k, sodass für alle n \geq k gilt: g(n) < a(k,n). Setzt man hier n = k so erhält man den Widerspruch:
    g(k)\leq f_g(k) &amp;lt; a(k, k) = g(k)

Für Details zum Beweis sehe man z. B. im Buch von Schöning nach. (Siehe Literatur)

Anwendungen

Für die Ackermannfunktion gibt es nur sehr wenige Anwendungen. Die zwei wichtigsten sind Benchmarktests für rekursive Aufrufe in Programmiersprachen und Laufzeitabschätzungen der gewichteten Vereinigung und Pfadkompression bei der Union-Find-Struktur.

Benchmark für rekursive Aufrufe

Bei der Einführung von neuen Programmiersprachen, Compilern und Computern möchte man deren Leistungsfähigkeit untersuchen. Dazu werden u. a. mittels Benchmarking durch spezielle Programme festgelegte Eigenschaften überprüft.

In diesem Zusammenhang wird die Ackermannfunktion gerne als Benchmark zur Überprüfung von rekursiven Prozedur-Aufrufen benutzt, da ein Programm zur Berechnung der Ackermannfunktion im Wesentlichen nur aus solchen Prozeduraufrufen besteht. In der Definition von Péter wird ja nur a(0,m) direkt berechnet. Die Schwierigkeit bei der Berechnung der Funktionswerte sind also nicht allein deren Größe, sondern die tiefe Verschachtelung der Funktionsaufrufe, die leicht zu einem Stapelüberlauf (engl. Stack Overflow) führt, also dazu, dass dem System der Speicher ausgeht.

Diese Idee geht zurück auf Yngve Sundblad, der 1971 die Funktion f(n): = a(3,n) benutzte, um diverse Programmiersprachen zu vergleichen. Um a(3,n) zu berechnen, werden a(3,n) + 12n − 2 Aufrufe getätigt.

Sundblad testete unter anderem, wie groß n gewählt werden kann, damit der Computer noch in der Lage ist, diese Zahl zu berechnen. Damals erreichte er n = 1. Zum Vergleich hierzu: Mit Java 1.4.2, mit den Standardspeichereinstellungen, erreicht man heutzutage n = 13.

Im Laufe der Berechnung werden viele identische Aufrufe mehrfach ausgerechnet. Ein intelligenter Compiler kann dies ausnutzen und die Ergebnisse zwischenspeichern, um solche Aufrufe nur einmal durchführen zu müssen. Damit waren schon 1971 Aufrufe bis n = 20 durchführbar. Einen bedeutenden Zeitvorteil erhält man auch, wenn man a(1,n) direkt berechnet, statt es rekursiv zu a(1, a(1, a(1, \dots a(1, 0)\dots))) zu expandieren. Die direkte Berechnung von a(1,n) erfordert lineare Zeit in n. Die Berechnung von a(2,n) erfordert quadratische Zeit, denn sie führt zu O(n) (also c\cdot n für eine Konstante c) verschachtelten Aufrufen von a(1,i) für verschiedene i. Die Berechnung von a(3,n) erfordert schließlich eine zu 4n + 1 proportionale Zeit (O(4n + 1); zur Erklärung der Groß-O-Notation siehe Landau-Symbole).

Laufzeitabschätzungen mit der Umkehrfunktion

Da die Funktion f(n): = a(n,n) sehr schnell wächst, wächst ihre Umkehrfunktion f − 1 sehr langsam. Sie ist für jede praktisch vorstellbare Eingabegröße kleiner als 5, weil der Funktionswert f(4) = a(4,4) größer als die Anzahl der Atome im Universum ist, wie die Berechnung von a(4,3) weiter unten zeigt. In der praktischen Analyse von Algorithmen kann sie also als konstant betrachtet werden.

Diese Umkehrfunktion taucht in der Laufzeitanalyse bestimmter Algorithmen auf, zum Beispiel beim Union-Find-Problem und in Chazelles Algorithmus für minimale Spannbäume. In diesem und anderen Zusammenhängen wird die ursprüngliche Ackermannfunktion oft durch Weglassen additiver Konstanten, oder anderer Modifikationen, leicht umdefiniert zu einer Funktion mit ähnlichem asymptotischen Verhalten. Diese modifizierten Funktionen sind nicht äquivalent zur Ackermannfunktion, aber nach den Maßstäben der Laufzeitanalyse können sie als äquivalent betrachtet werden.

Implementierung

Die rekursive Implementierung der Ackermannfunktion (hier in Pseudocode) entspricht direkt der Definition:

 function ack(n, m)
     if n = 0
         return m + 1
     else if m = 0
         return ack(n - 1, 1)
     else
         return ack(n - 1, ack(n, m - 1))

Etwas effizienter ist die folgende, teilweise iterative Implementierung:

 function ack(n, m)
     while n ≠ 0
         if m = 0
             m := 1
         else
             m := ack(n, m - 1)
         n := n - 1
     return m + 1

Noch effizientere Implementierungen verwenden Arrays zur Zwischenspeicherung bereits berechneter Werte, siehe auch Dynamische Programmierung.

In Haskell, einer funktionalen Programmiersprache, spiegelt die Implementierung direkt die Definition wider:

 ack 0 m = m+1
 ack (n+1) 0 = ack n 1
 ack (n+1) (m+1) = ack n (ack (n+1) m)

In Prolog sieht die Implementierung so aus:

 ackermann(0,X,Y) :- X >= 0, !, Y is X + 1.
 ackermann(X,0,Z) :- X > 0, !, X1 is X - 1, ackermann(X1,1,Z).
 ackermann(X,Y,Z) :- X > 0, Y > 0, X1 is X-1, Y1 is Y - 1, ackermann(X,Y1,W), ackermann(X1,W,Z).

Wertetabelle

Die folgende Tabelle zeigt einige Funktionswerte für kleine Werte von n und m. Die nicht vollständig ausgerechneten Werte sind zu groß, um sie dezimal darzustellen.

Werte von a(n,m)
n \ m 0 1 2 3 4 m
0 1 2 3 4 5 m + 1
1 2 3 4 5 6 m + 2
2 3 5 7 9 11 2m + 3
3 5 13 29 61 125 8\cdot 2^m-3
4 13 65533 2^{65536}-3 \approx 2 \cdot 10^{19728} ¹ a(3,265536 − 3) a(3,a(4,3)) 2^{2^{\dots^2}}-3 (m + 3 Terme)
5 65533 a(4,65533) a(4,a(5,1)) a(4,a(5,2)) a(4,a(5,3))
6 a(5,1) a(5,a(5,1)) a(5,a(6,1)) a(5,a(6,2)) a(5,a(6,3))

¹eine Zahl mit 19729 Dezimalstellen

Trotz der unvorstellbar großen Zahlen, die schon in dieser Tabelle auftauchen, wurden rekursive Verfahren definiert, die noch schneller wachsende Werte liefern, so zum Beispiel Grahams Zahl.

Genauere Betrachtung

Anhand der Wertetabelle lässt sich ein Schema zur Berechnung der Funktionswerte herleiten, das leichter zu verstehen ist als die formale rekursive Definition. Es ist leicht zu erkennen, dass die Werte der ersten Zeile einfach eine Liste aller natürlichen Zahlen sind. Die jeweiligen Einträge können mit der Formel a(0,m) = m + 1 berechnet werden. Alle folgenden Zeilen enthalten einfach Anweisungen, in dieser Zeile einen Wert zu suchen. Im Falle der Zeile x = 1 vereinfacht sich diese Anweisung dazu, den Wert a(0,y + 1) in der Zeile x = 0 zu suchen, aber diese Vereinfachung ist schon etwas schwieriger herzuleiten – zum Beispiel:

a(1, 2) = a(0, a(1,1))
        = a(0, a(0, a(1,0)))
        = a(0, a(0, 2))
        = a(0, 3)
        = 4

Wir betrachten nun einen komplexeren Fall, nämlich a(4,3), den ersten Funktionswert, der so groß ist, dass er praktisch nicht dezimal aufgeschrieben werden kann.

a(4, 3) = a(3, a(4, 2))
        = a(3, a(3, a(4, 1)))
        = a(3, a(3, a(3, a(4, 0))))
        = a(3, a(3, a(3, a(3, 1))))
        = a(3, a(3, a(3, a(2, a(3, 0)))))
        = a(3, a(3, a(3, a(2, a(2, 1)))))
        = a(3, a(3, a(3, a(2, a(1, a(2, 0))))))
        = a(3, a(3, a(3, a(2, a(1, a(1, 1))))))
        = a(3, a(3, a(3, a(2, a(1, a(0, a(1, 0)))))))
        = a(3, a(3, a(3, a(2, a(1, a(0, a(0, 1)))))))
        = a(3, a(3, a(3, a(2, a(1, a(0, 2))))))
        = a(3, a(3, a(3, a(2, a(1, 3)))))
        = a(3, a(3, a(3, a(2, a(0, a(1, 2))))))
        = a(3, a(3, a(3, a(2, a(0, a(0, a(1, 1)))))))
        = a(3, a(3, a(3, a(2, a(0, a(0, a(0, a(1, 0))))))))
        = a(3, a(3, a(3, a(2, a(0, a(0, a(0, a(0, 1))))))))
        = a(3, a(3, a(3, a(2, a(0, a(0, a(0, 2))))))
        = a(3, a(3, a(3, a(2, a(0, a(0, 3)))))
        = a(3, a(3, a(3, a(2, a(0, 4)))))
        = a(3, a(3, a(3, a(2, 5))))
        = ...

Das ist für einige Zeit der einfachste Fall einer solchen Expansion, und es ist anhand der Tabelle offensichtlich, warum Funktionswerte wie dieser selten direkt berechnet werden. Es ist auch interessant festzustellen, wie viele Schritte nötig sind, um schon sehr einfach aussehende Ackermann-Ausdrücke zu vereinfachen. Jede Zeile im vorigen Beispiel ist eine einzige Anwendung eines der drei Teile der Definition der Ackermannfunktion.

    ... =  a(3, a(3, a(3, 13)))
        = ...
        = a(3, a(3, 65533))

Wenn wir an dieser Stelle mehrere logische Schritte überspringen, könnten wir a(2,5) zu 13 auswerten, und dann versuchen, a(3,13) auszuwerten – das ist 65533. Doch schon der nächste Funktionsaufruf liefert mit a(3,65533) eine Zahl, die weit über die geschätzten Anzahl der Atome im Universum hinausgeht. Diese Zahl n wird schließlich in die Berechnung a(3,n) eingesetzt, die irgendwann zu einem Ausdruck der Form a(2, a(2, a(2, \dots a(2, 0)\dots))) ausgeschrieben würde, die aber mit unseren Mitteln nicht mehr aufgeschrieben werden kann.

Der wirklich faszinierende Aspekt der Ackermann-Funktion ist, dass die einzige Berechnung, die neben den rekursiven Aufrufen tatsächlich auftaucht, die Berechnung von a(0,n) ist, die einfach n um 1 erhöht.

Sonstiges

Funktionswert a(4,2)

Des Öfteren wird vor allem im Internet der Funktionswert a(4,2) in Form einer 19727-stelligen Dezimalzahl angegeben. Dieser kann wahrscheinlich noch nicht mit Hilfe der rekursiven Definition der Ackermannfunktion praktisch berechnet werden, weil zum Abspeichern der Zwischenergebnisse bei weitem zu viel Speicherplatz benötigt werden würde.

Die Funktion Fleißiger Biber

1962 gab Tibor Radó mit der Funktion Fleißiger Biber (busy beaver) eine noch stärker als die Ackermannfunktion (oder jede andere berechenbare Funktion) wachsende Funktion an, die allerdings nicht mehr berechenbar ist.

Literatur

  • Wilhelm Ackermann: Zum Hilbertschen Aufbau der reellen Zahlen., Mathematische Annalen 99 (1928) ISSN 0025-5831, 118–133
  • Yngve Sundblad: The Ackermann Function. A Theoretical, Computational, and Formula Manipulative Study. in: BIT - numerical mathematics. Springer, Dordrecht 11.1971, 107–119. ISSN 0006-3835
  • Uwe Schöning: Theoretische Informatik – kurzgefasst. Spektrum Akademischer Verlag, Heidelberg 2001. ISBN 3-8274-1099-1
  • Dexter C. Kozen: The Design and Analysis of Algorithms. Springer, Berlin 1992. ISBN 3540976876

Weblinks


Wikimedia Foundation.

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Ackermann — ist ein deutscher Familienname. Herkunft und Bedeutung Der Name ist eine veraltete deutsche Bezeichnung für einen Hufner. Bekannte Namensträger Inhaltsverzeichnis A B C D E F G H I J K L M N O P …   Deutsch Wikipedia

  • Wilhelm Ackermann (Mathematiker) — Wilhelm Ackermann Wilhelm Friedrich Ackermann (* 29. März 1896 in Schönebecke (Herscheid); † 24. Dezember 1962 in Lüdenscheid) war ein deutscher Mathematiker. Inhaltsverzeichnis …   Deutsch Wikipedia

  • Berechenbare Funktion — In der Berechenbarkeitstheorie nennt man eine Funktion berechenbar, wenn es einen Algorithmus gibt, der die Funktion berechnet. Die Funktion, die ein Algorithmus berechnet, ist gegeben durch die Ausgabe, mit der der Algorithmus auf eine Eingabe… …   Deutsch Wikipedia

  • Eduard Ackermann — Ackermann mit Helmut Kohl, 1989 Eduard Ackermann (* 1. November 1928 in Geldern) ist ein deutscher Politiker der CDU. Er war von 1982 bis 1995 unter Helmut Kohl Leiter der Abteilung 5 des …   Deutsch Wikipedia

  • Joe Ackermann — Josef Ackermann Josef Meinrad Ackermann (* 7. Februar 1948 in Mels im Sarganserland) ist ein Schweizer Manager. Er war ab dem 22. Mai 2002 der 18. Vorstandssprecher und ist seit Februar 2006 der erste Vorstandsvorsitzende der Deutschen Bank …   Deutsch Wikipedia

  • Josef Ackermann — Josef „Joe“ Meinrad Ackermann (* 7. Februar 1948 in Mels[1], Kanton St. Gallen, Schweiz) ist ein Bankmanager …   Deutsch Wikipedia

  • Manfred Ackermann — (* 1. November 1898 in Nikolsburg (Mähren); † 16. Juni 1991 in Wien) war ein österreichischer sozialdemokratischer Politiker und Gewerkschaftsfunktionär in Österreich und den USA. Inhaltsverzeichnis 1 Leben 2 Auszeichnungen …   Deutsch Wikipedia

  • Joseph Ackermann — (* 16. Februar 1901 in Bulle; † 5. Mai 1987 in Freiburg, heimatberechtigt in Düdingen und Plasselb) war ein Schweizer Politiker (CSP). Inhaltsverzeichnis 1 Leben 2 Politische Laufbahn …   Deutsch Wikipedia

  • rekursive Funktion — rekursive Funktion,   in der Mathematik eine mittels rekursiver Definition gewonnene Funktion, für die es ein Berechnungsverfahren der Funktionswerte gibt. Als primitiv rekursiv (K. Gödel, 1931) bezeichnet man:   a) die Zahl 0; die Funktion f (x1 …   Universal-Lexikon

  • Ackermannfunktion — Die Ackermannfunktion ist eine 1926 von Wilhelm Ackermann gefundene, extrem schnell wachsende mathematische Funktion, mit deren Hilfe in der theoretischen Informatik Grenzen von Computer und Berechnungsmodellen aufgezeigt werden können. Heute… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”