Rekursive Funktionen



  • Scherz hin oder her.
    Wer ausser mir hat eine Funktion geliefert, die alle Anforderungen erfüllt? Richtig - niemand.

    EDIT:
    WAS mich auch immer zum Ziel führt ist für mich in Ordnung.



  • EOP schrieb:

    Scherz hin oder her.
    Wer ausser mir hat eine Funktion geliefert, die alle Anforderungen erfüllt? Richtig - niemand.

    Soso

    EOP schrieb:

    WAS mich auch immer zum Ziel führt ist für mich in Ordnung.

    Ahja... machste auch mit ner Schrotflinte Getränkeflaschen auf?



  • DocShoe schrieb:

    Ahja... machste auch mit ner Schrotflinte Getränkeflaschen auf?

    Nö, aber mit der Tischkante oder einem zusammengefalteten Geldschein oder meinem Feuerzeug.



  • EOP schrieb:

    Scherz hin oder her.
    Wer ausser mir hat eine Funktion geliefert, die alle Anforderungen erfüllt? Richtig - niemand.

    EDIT:
    WAS mich auch immer zum Ziel führt ist für mich in Ordnung.

    Lachhaft. Wenn Du den Rat von th69 befolgt hättest, würdest du sehen, dass dein programm Schrott ist. Einfach mal

    if( str.length() )
            rek(str);
    

    zusätzlich in dein main() einfügen, um deine geniale Funktion zweimal aufzurufen.



  • EOSchrott schrieb:

    Lachhaft. Wenn Du den Rat von th69 befolgt hättest, würdest du sehen, dass dein programm Schrott ist. Einfach mal

    if( str.length() )
            rek(str);
    

    zusätzlich in dein main() einfügen, um deine geniale Funktion zweimal aufzurufen.

    Normalerweise beantworte ich keine posts von unregistrierten Gestalten, aber machen wir mal eine Ausnahme, du kleiner Dummkopf:
    Diese Funktion ist weder dafür entworfen noch dafür gedacht, sie mehrfach hintereinander aufzurufen. Rekursiv funktioniert sie.
    Liefere was Besseres ab. Bis dahin alles Gute für dich.



  • Anscheinend haben alle mögliche Leute Spaß an EOP-bashing. Seis drum.
    Liefert erstmal ein Programm, das die beiden Anforderungen erfüllt. Danach reden wir weiter.
    - rekursiv
    - nur der string soll übergeben werden

    Und jetzt macht mal ihr superschlauen Helden. Freue ich schon auf alle Antworten.


  • Mod

    Ich weiß wirklich nicht, ob Troll oder tatsächlich dumm. Die allererste Antwort im Thread liefert eine genaue Bauanleitung für solch ein Programm. Das ist eine Aufgabe, die blutige Anfänger beantworten sollen und können. Kein Grund, andere Leute Dummköpfe zu nennen, wenn sie deine Schrottprogramme (oder "Scherzprogramme", wie du sie nennst) als solche zerreißen.



  • SeppJ schrieb:

    Eine viel einfachere, rekursive Definition einer umgedrehten Zeichenfolge ist: Eine umgedrehte Zeichenfolge ist leer, falls das Original leer ist. Ansonsten ist sie das letzte Zeichen der Originalfolge plus die Umdrehung aller Zeichen der Originalfolge vor dem letzten Zeichen.

    Wie du siehst, muss da nirgendwo gezählt werden, alles geht über Zeichenfolgen und ihre Längen.

    Bei allem Respekt für dich, SeppJ - zeige es mir.
    Und Dummköpfe benamse ich solange als Dummköpfe bis das Gegenteil bewiesen ist.

    Weshalb gibt es denn das Sprachkonstrukt der lokalen static Variablen?
    Ich weiß zumindest wie man es konstruktiv, zur Freude aller Beteiligten und gut für 2-3 Seiten Kommentare einsetzt.

    Wenn ich dran erinnern darf:

    EOP schrieb:

    Zur Not benutze ich eine fiese lokale static Variable.

    Wie es scheint bin ich mir also durchaus bewusst, was ich mache.



  • EOP schrieb:

    SeppJ schrieb:

    Eine viel einfachere, rekursive Definition einer umgedrehten Zeichenfolge ist: Eine umgedrehte Zeichenfolge ist leer, falls das Original leer ist. Ansonsten ist sie das letzte Zeichen der Originalfolge plus die Umdrehung aller Zeichen der Originalfolge vor dem letzten Zeichen.

    Bei allem Respekt für dich, SeppJ - zeige es mir.

    Ich will ja jetzt nicht auch noch auf dich einhauen, aber das ist doch jetzt echt blöd.

    std::string rek(const std::string& s)
    {
        // Eine umgedrehte Zeichenfolge ist leer, falls das Original leer ist.
        if(s.length() == 0)
            return "";
        // Ansonsten ist sie das letzte Zeichen der Originalfolge
        std::string a {s.at(s.length()-1)};  //substr oder sowas nicht erlaubt
        // plus die Umdrehung aller Zeichen der Originalfolge vor dem letzten Zeichen.
        std::string b {s, 0, s.length()-1};  //substr oder sowas nicht erlaubt
        return a + rek(b);
    }
    

  • Mod

    EOP schrieb:

    Und Dummköpfe benamse ich solange als Dummköpfe bis das Gegenteil bewiesen ist.

    Dann bist du jetzt ganz offiziell der Forenclown, bis zum Beweis des Gegenteils.



  • Hier noch eine Version in einer funktionalen Sprache (das ja keine [globalen] Variablen kennt) - denn das ist nun wirklich ein Allerweltsproblem:

    rev xs = if null xs then xs else rev (tail xs) ++ [head xs]
    

    oder mittels pattern matching

    rev [] = []
    rev (x:xs) = rev xs ++ [x]
    

    (hier mittels Haskell)

    @EOP: Und Jockelx hat dies eben 1:1 nach C++ übersetzt - ganz easy!



  • EOP schrieb:

    Weshalb gibt es denn das Sprachkonstrukt der lokalen static Variablen?

    Ganz sicher nicht, um damit Funktionen zu kreieren, die man nur ein Mal aufrufen kann/darf!



  • SeppJ schrieb:

    EOP schrieb:

    Und Dummköpfe benamse ich solange als Dummköpfe bis das Gegenteil bewiesen ist.

    Dann bist du jetzt ganz offiziell der Forenclown, bis zum Beweis des Gegenteils.

    Na wo ist der Beweis deiner Behautung, daß das ruckzuck geändert werden könnte?
    Bestehe immer noch darauf Dummköpfe als solche zu benennen. Bin mir nicht sicher, ob ich dich in die Lister nicht einrezhe.



  • SeppJ schrieb:

    EOP schrieb:

    Und Dummköpfe benamse ich solange als Dummköpfe bis das Gegenteil bewiesen ist.

    Dann bist du jetzt ganz offiziell der Forenclown, bis zum Beweis des Gegenteils.

    Na wo ist der Beweis deiner Behauptung, daß das ruckzuck geändert werden könnte?
    Bestehe immer noch darauf, Dummköpfe als solche zu benennen. Bin mir noch nicht ganz sicher, ob ich dich in die Liste einreihe oder doch nicht. Au, der war fies.





  • Naja, da würde ich jetzt nicht widersprechen, daß ich ein Narzisst bin.
    Aber meine Sexualpartner und/oder Kinder zu missbrauchen würde ich doch vehement bestreiten.

    Man könnte den string noch nach und nach von hinten nach vorne schreddern bis die Länge Null ist, aber ob das eleganter ist ist eine andere Frage.



  • EOP schrieb:

    Man könnte den string noch nach und nach von hinten nach vorne schreddern bis die Länge Null ist, aber ob das eleganter ist ist eine andere Frage.

    Sofern ich dich richtig verstehe, hat das Dummkopf 'wob' auch schon bereits auf der ersten Seite gesagt.



  • Here you go:

    int main(void)
    {
    string str = "Hello World!";
    
    	if( str.length() )
    		rek_shredder(str);
    	return 0;
    }
    
    void rek_shredder(string str)
    {
    	if( str.length() )
    	{
    			cout << (str.at( str.length() - 1 )  );
    			str.resize( str.length() - 1 ); 
    			rek_shredder(str);
    	}
    
    }
    


  • Jockelx schrieb:

    Sofern ich dich richtig verstehe, hat das Dummkopf 'wob' auch schon bereits auf der ersten Seite gesagt.

    Habe 'wob' nie als Dummkopf bezeichnet. Nur verschiedene Andere, die es auch ehrlich verdient haben.



  • Klassischer Einzeiler:

    std::string r(std::string const& s)
    {
    	return s.size()?r(s.substr(1))+s[0]:s;
    }
    

Anmelden zum Antworten