Rekursive Funktion



  • Hallo liebe Foren-Mitglieder,

    ich habe die Zahlenfolge

    0,
    00,
    200,
    6200,
    126200,
    20126200,
    3020126200,
    423020126200,

    gegeben. Jetzt soll ich eine Funktion schreiben, die Zeichenkette des n-ten Gliedes berechnet. Wichtig hierbei ist, dass es eine Zeichenkette (string) ist.
    Die iterative Funktion war kein Problem, nur die rekursive Variante bekomme ich nicht hin. Kann mir da jemand weiter helfen?

    Anbei noch den Quellcode der iterativen Variante:

    string zeichenkette (int n)
    {
    	string kette="0";
    	int sufix=0;
    
    	for (int i=0; i<n; i++)  
    	{		
    		sufix=sufix+2*i;
    
    		// int sufix zu string temp
    		string temp;
    		ostringstream convert;
    		convert << sufix;
    		temp=convert.str();
    
    		kette= temp+kette;
    
    	}
    
    	return kette;	
    }
    

    Grüße Jens



  • Als Tipp: rufe folgende Funktion rekursiv auf

    string zeichenkette_rekursiv(string kette, int suffix, int i, int n)
    

    Btw. bitte verwende die C++-Tags in deinem Beitrag



  • Hallo Th69,

    danke für deine Antwort. Ich habe deinen Tipp in meine Überlegungen eingebaut, schaffe es aber nur eine Endlosschleife zu programmieren. Bin ich weit von der Lösung entfernt?

    string zeichenkette_rekursiv(string kette, int sufix, int n)
    {
    	if (n==0)
    	{
    		kette="0";
    		sufix=0;
    	}
    	if (n>0) 
    	{
    		int sufix=(n-1)*2;
    
    		string temp;
    		ostringstream convert;
    		convert << sufix;
    		temp=convert.str();
    
    		kette=temp+kette;
    
    		return zeichenkette_rekursiv(kette, sufix, (n-1));	
    	}
    }
    


  • Also von der "Zahlenfolge" (die eigentlich eine Folge von Ziffernfolgen ist) hätte ich jetzt nicht so schnell auf die iterative Lösung geschlossen. Wie bist du denn darauf gekommen? Du musst irgendwie die Bildungsvorschrift herausbekommen haben, oder war die gegeben?



  • Ja, man muss sich zuerst über die Bildungsvorschrift im klaren sein.
    Startelement ist die 0.
    Danach wird auf die linke Seite immer 2*i + das Vorgängerelement angefügt

    Also

    0,
    20+0 0, ->00
    2
    1+0 00, -> 200
    22+2 200, -> 6200
    2
    3+6 6200, -> 126200
    2*4+12 126200, -> 20126200



  • Wir rufst du denn diese Funktion jetzt initial auf?
    Und es fehlt auf jeden Fall ein 'return' in dem ersten if-Block (bzw. am besten ganz am Ende der Funktion).

    Hast du denn einen Debugger? Dann kannst du ja dort einen 'Breakpoint' setzen und Schritt für Schritt die Funktion durchgehen.
    Ansonsten lasse dir einfach mal 'kette' zu Beginn der Funktion ausgeben...


Anmelden zum Antworten