Wie verwaltet das Betriebssystem dne Speicher bei folgender Funktion?

Cherrycoke

Mitglied
Hallo Community,

ich habe folgenden Code gegeben:

C:
int fibo( int n )
{
  int erg1, erg2;
  if ( (n==0) || (n==1) ) return 1;
  else
    {
    
    /* Hier erfolgt der erste rekursive Aufruf */
    
    erg1 = fibo( n-1 );
    
    /* Symbolische Markierung für die Rücksprungadresse: R1 */
    
    /Hier erfolgt der zweite rekursive Aufruf */
     
     erg2 = fibo( n-2);
     
     /* Symbolische Markierung für die Rücksprungadresse: R2 */
     
     return erg1+erg2;
     }
}

Nun soll der Code in einem Hauptprogramm mit a = fibo(3); aufgerufen werden. Nun soll die Gestalt und Inhalt des Stacks für alle erforderlichen Schritte skizziert werden.

Leider komme ich hier nicht weiter. Ich habe folgendes:

Nach dem Funktionsaufruf in Zeile 10 sieht der Stack folgender maßen aus:

n=3
erg1= ?
erg2 = ?

nun wird die Funktion aus Zeile 10 mit n-1 nochmal aufgerufen. Also habe ich:
n = 3 n=2
erg1=? erg1=?
erg2=? erg2=?

nun wird die Funktion aus Zeile 10 noch einmal aufgerufen:

n = 3 n=2 n=1
erg1=? erg1=? erg1= 1 (Da nun die Bedinung in Zeile 4 erfült ist und return1)
erg2=? erg2=? erg2=?

Aber wie sieht nun der Stack im nächsten Schritt aus? Ich bin ja der Meinung, das es nach dem return aus der ersten Funktion (im dritten Aufruf) in Zeile 16 weiter geht. Aber mein n ist nun 1. Also wird fibo (1-2) aufgerufen? Also:

n = 3 n=2 n=1 n=-1
erg1=? erg1=? erg1= 1 erg1=1
erg2=? erg2=? erg2=? erg2=?

Ich denke, dass an dieser Stelle ein Denkfehler passiert ist. Kann mir wer kurz helfen?

Danke!
 

Neue Beiträge

Zurück