Aufgaben

Aufgabe: Rekursive Programme analysieren

In dieser Aufgabe sollen Sie das folgende Ruby-Programm analysieren.

def zero(n):
  if n == 0:
    return 0
  else:
    return zero(zero(n-1))
  1. Beschreiben Sie die gezeigte Definition unter Verwendung der Begriffe Funktion oder Prozedur, Parameter, Aufruf, Argument, Ergebnis, Rumpf, Rückgabewert, Abbruchbedingung und rekursiv. Bennenen sie außerdem alle Anweisungen mit ihrer korrekten Bezeichnung.
  2. Veranschaulichen Sie die Auswertung des Aufrufs zero(3), indem Sie alle rekursiven Aufrufe und zugehörige Ergebnisse in der Reihenfolge ihrer Auswertung notieren. Rücken Sie Unter-Berechnungen entsprechend der Struktur der Auswertung ein.
  3. Welchen Wert liefert ein Aufruf von zero() mit einer beliebigen natürlichen Zahl als Argument?
  4. Notieren Sie tabellarisch, wie oft zero() insgesamt (direkt oder indirekt) bei einem Aufruf zero(n) für \(n \in {0,1,2,3,4}\) aufgerufen wird.
  5. Wieviele zero()-Aufrufe werden zur Auswertung zero(n) für beliebiges n benötigt?