Rekursion zu Durchsuchen verketteten Listen



  • Der Programm ist zu lang um Alles hier anzugeben, es geht aber um die Funktion:
    int zahl(node*addresse)
    {
    int counter;
    if (addresse==NULL)
    counter=0;
    else
    {
    if (addresse->name.size()>10)
    return 1;
    else
    return 0;
    addresse=addresse->weiter;
    zahl(addresse);
    counter+=zahl(addresse);
    };
    cout<<counter<<endl;

    };[cpp]

    scheint in Ordnung zu sein, funktioniert aber nicht.
    Hilfe 😕



  • Scheint was kaputt zu sein... (Tipp: Wer den Fehler genauer beschreibt, kriegt genauere Antworten)



  • int zaehleAdressenMitNamenDieMindestensZehnZeichenLangSindUndZwarRekursivObwohlDasUnfugIst(node* addresse)
    {
      if (addresse==NULL)
          return 0;
      if (addresse->name.size()<=10)
        return 0+zaehleAdressenMitNamenDieMindestensZehnZeichenLangSindUndZwarRekursivObwohlDasUnfugIst(addresse->weiter);
      return 1+zaehleAdressenMitNamenDieMindestensZehnZeichenLangSindUndZwarRekursivObwohlDasUnfugIst(addresse->weiter);
    };
    


  • addresse=addresse->weiter;
          zahl(addresse); 
          counter+=zahl(addresse);
    

    Wie soll der code denn je erreicht werden?

    Und sollte zahl(...) dann gleich zweimal nacheinander rekursiv fortfahren?

    scheint in Ordnung zu sein, funktioniert aber nicht.

    Ist nicht in Ordung und funktioniert deshalb auch nicht.

    @volkard:

    zaehleAdressen/
    MitNamenDieMindestensZehnZeichenLangSind/
    UndZwarRekursiv/
    ObwohlDasUnfugIst
    

    wäre wesentlich lesbarer. 😉



  • Meine Idee war: soll nach der Rekursion
    if (adresse==NULL) dem Counter Wert 0 geben und danach das was nach der Rekursion stand - also Counter=Counter+ (sukcessiv was jede Funktion ergab).
    also :

    zahl(adresse) =ergibt z.B. 1
    adresse=adresse->next; (1 weiter)
    zahl(adresse)=...1;
    *1 (soll spater erfolgen weil Rekursion)
    adresse=adresse->next;
    zahl(adresse)=...0
    *2...
    adresse==NULL also Counter=0

    unt das was geblieben ist:

    *2 (Counter+=0)
    *1 (Counter+=1)

    Hoffentlich kann jetz jemand verstehen was ich meinte.



  • EOP schrieb:

    @volkard:

    zaehleAdressen/
    MitNamenDieMindestensZehnZeichenLangSind/
    UndZwarRekursiv/
    ObwohlDasUnfugIst
    

    wäre wesentlich lesbarer. 😉

    ** nicht / 😉

    for (;;){
            Ausserdem\
    gehtDieEinrueckung\
    floetenWeshalbEsAuchNichtViel\
    LesbarerIst();
        }
    


  • Eda schrieb:

    Meine Idee war: soll nach der Rekursion
    if (adresse==NULL) dem Counter Wert 0 geben und danach das was nach der Rekursion stand - also Counter=Counter+ (sukcessiv was jede Funktion ergab).

    clar. aber das wird nix, weil counter ja locale variable in der function ist und wenn du in den tieferen functionsaufrufen den counter incrementierst, dann criegt der obere nichts davon mit. deshalb habe ich es versucht, mit zurüccgeben von teilergebnissen und erst oben ausrechnen.



  • volkard schrieb:

    Eda schrieb:

    Meine Idee war: soll nach der Rekursion
    if (adresse==NULL) dem Counter Wert 0 geben und danach das was nach der Rekursion stand - also Counter=Counter+ (sukcessiv was jede Funktion ergab).

    clar. aber das wird nix, weil counter ja locale variable in der function ist und wenn du in den tieferen functionsaufrufen den counter incrementierst, dann criegt der obere nichts davon mit. deshalb habe ich es versucht, mit zurüccgeben von teilergebnissen und erst oben ausrechnen.

    Was denn heut hier los? :D:D:D



  • unskilled schrieb:

    Was denn heut hier los? :D:D:D

    Anscheinend verdreht uns die Aussicht auf den Frühling die Köpfe. 😉

    @Kritiker: Ich bin Linkshänder, deshalb hab' ich wohl / und \ verwechselt. :p


Log in to reply