Geltungsbereich und Funktionen (verständnisschwierigkeiten beim ausgabe)



  • ich verstehe nicht warum die ausgabe 2010 ist

    ich verstehe so:
    1. wird f(2)aufgerufen cout << 2
    2. dann f(0) desswegen cout << 0
    3. i = 1 wegen f(1) cout << 1; i = 2 also nichtmehr kleiner als k und wird desswegen beendet

    wo ist mein fehler? was sehe ich nicht?

    #include <iostream>
    using namespace std;
    
    void f(int k){
    
    	cout << k; // 1.   2 ausgegeben
    
    	int i = 0; 
    
    	for(; i < k;i = i+1)
    		f(i); // wegen f(0) wird 0 ausgegeben . i wird 1 und wird desswegen beim 2 . durchlauf 
    
    }
    
    int main(){
    
    	f(2);
    
    	cout << endl;
    	return 0;
    }
    

  • Mod

    khati schrieb:

    wo ist mein fehler? was sehe ich nicht?

    Dein Punkt 3. i ist nicht static, die verschiedenen Ebenen der Rekursion haben überhaupt nichts miteinander zu tun. Das i im f(1) ist ein ganz eigenes, welches von 0 an hochzählt und daher wird noch einmal f(0) aufgerufen.



  • ich frag mich grad wieso man einen rekursionsaufruf in einer schleife macht?
    sich da im kopf rein zu denken ist naja etwas speziell...



  • Skym0sh0 schrieb:

    sich da im kopf rein zu denken ist naja etwas speziell...

    darum geht es wohl.


Anmelden zum Antworten