Ajutor functie recursiva

Salut ! Ma poate ajuta cineva cu aceasta functie?

int C(char *sir) {
    if(strlen(sir) == 0)
        return 0;
    else {
    if(strchr("aeiouAEIOU",sir[strlen(sir) - 1])) {
        sir[strlen(sir) - 1]='\0';
        return 1+ C(sir);
    }
    else {
      sir[strlen(sir) - 1]='\0';
        return C(sir);
    }
    }

}

Returneaza cate vocale contine un sir de caractere,doar ca nu merge,se executa la infinit.
Ce ar trebuie sa faca : de fiecare data verifica daca caracterul de la sfarsitul sirului este vocala,daca este creste cu 1 si taie acel caracter,tot asa pana ramane fara caractere(strlen(sir) == 0)

Dar de ce foloseşti funcţie recursivă pentru aşa ceva, aşa se cere?

1 Like

asa e exercitiul

Tu ai recursivitate infinita deoarece apelezi aceeasi functia in ea insasi

int C(char *sir)

si il apelezi aici
 return 1+ C(sir) si aici  return C(sir); ;


Serghei are dreptate. Daca nu se cere recursivitate nu o folosi :slight_smile:

@dacian, ai varianta iterativa ?

Anyway !

Aici ai o alta varinata. V fi nevoie sa o adaptezi putin :smiley:

De asemenea iti recomand cu caldura sa folosesti un ide plus facilitatile acestuia de debugging. Te vor ajuta mult in depanarea problemelor.
Eu folosesc Visual Studio Community si sunt incantat de el


Recomand acest site tuturor celor care sunt pasionati de algoritmica precum si alte topic-uri computer science. Stiu ca l-am mai mentionat o data, dar la alt topic

Eu as face o regula. Daca pui o intrebare care se vede de la o posta ca e tema la Informatica, daca nu spui ce anume concret nu merge, ce ai incercat, topicul sa fie inchis. Nasty nazi, but it is what it is.

4 Likes

1.Nu e tema la informatica
2.Am spus ce nu merge : ar trebui sa numere cate vocale contine un sir de caractere,doar ca se executa la infinit cu toate ca e specificat sa returneze 0 daca ramane fara caractere(daca lungimea sirului devine 0).La fiecare executie se sterge caracterul de la final(devine ‘\0’ adica sfarsit de sir)

Edit: aparent functioneaza dar trebuie ca parametrul din functie sa fie o variabila,ex:

char a[]="Ana are mere";
cout<<C(a); //asa functioneaza
cout<<C("Ana are mere"); //asa nu functioneaza

Păi bineînţeles că nu poate funcţiona în felul în care ai implementat. Tu încerci să modifici un string constant. Chiar şi prima variantă funcţioneaza doar din greşeală, pentru ca la fel, încerci să modifici o zonă din memorie care normal ar trebui sa fie read-only.


Mă mir că te lasă compilatorul să faci asta. Nu ţipă vreun warning că nu e în regula să pointezi cu pointer non-const la un vector constant? La mine uite ce zice:

3:13: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

1 Like