Folgende Funktion ist gegeben (Überläufe bleiben unberücksichtigt):
Code: Alles auswählen
int f1(int par1, int par2)
{
if(par1 == 0) return par2;
else return f1(par1-1, par2+1);
}
1. Sind hier einfach die Zahlen 0 für par1 und beliebige int-Zahl für par2 gemeint, mit der die Funktion beendet wird? Ansonsten verstehe ich nicht, was mit "für die f1 terminiert" gemeint ist.1. Man muss die Menge der Werte eingeben, für die f1 terminiert.
2. f1(par1, par2) als möglichst einfache Formel aufschreiben.
3. Eine endrekursive Version schreiben oder begründen, warum diese Funktion f1 bereits endrekursiv ist.
2. Mein Vorschlag:
Code: Alles auswählen
int f1(int par1, int par2){return par1+par2;}
3. Ich würde sagen, dass diese Funktion bereits endrekursiv ist. Begründung: in der letzten Anweisung der Funktion ruft sich die Funktion selbst auf. Stimmt diese Antwort?
4. Wann und wo entstehen hier Überläufe? Der einzige Überlauf, der meiner Meinung nach hier entstehen könnte, ist wenn der Rückgabewert größer ist, als Integer speichern kann.
Danke!