Devo realizzare la seguente funzione:
int pari(char* s);
che, presa in input una stringa e SENZA USARE la funzione strlen, restituisce 1 se la stringa contiene un numero pari di caratteri (escluso il terminatore di stringa) e 0 altrimenti.
Nell’implementazione di tale funzione non è consentito l’uso di cicli, né nella funzione stessa né in eventuali funzioni ausiliare che essa dovesse usare.
Io stavo pensando a questo:
Per fermare la ricorsione:
if(s[y] == '\0')
return;
Però, se uso y, come indice, lo devo inizializzare nella funzione ricorsiva. Se lo inizializzo (int y = 0) ogni volta che la funzione riparte y torna a zero.
Comunque, se non entrasse in questo if, allora dovrei in qualche modo incrementare una variabile cont che conterebbe la lunghezza della stringa.. Se poi cont % 2 == 0 allora return 1 else return 0.
Poi ogni volta che richiamerei la funzione, farei
pari(s[y + 1]);
Avevo fatto questa cosa qui, che funziona. Però non va bene perché pari non è ricorsiva
int pari(char* s)
{
int i = 0, res;
res = conta(s, i);
if(res % 2 == 0)
return 1;
else
return 0;
}
int conta(char *str, int y)
{
if(str[y] == '\0')
return y;
else
if(str[y] != '\0')
conta(str, y+1);
}
Il mio problema principale è questo. Come scorrere la stringa? Perché nel prototipo della funzione
int pari(char *s) come parametro ho solo la stringa. Se, invece, avessi
int pari(char *, int indice) sarebbe più facile..
Mi date qualche consiglio? Grazie