Closed smesarubio closed 2 years ago
No, no está bien, ya que no se está resolviendo en forma recursiva y además solo sirve si se usa la función una sola vez durante el programa, por ejemplo probá lo siguiente:
int esPalindromo(char * str);
int main(){
printf("%i\n", esPalindromo("neuquen"));
printf("%i\n", esPalindromo("aca"));
printf("%i\n", esPalindromo("no es capicua"));
printf("%i\n", esPalindromo("aaaa"));
return 0;
}
Esta función la íbamos a resolver en clase el martes, pero te anticipo: si necesitás un valor inicial para poder resolverlo, entonces podés agregar un parámetro más (salvo que el enunciado lo prohíba) y hacés una función wrapper que le pase ese valor inicial.
Muchas gracias. Tambien tengo esta solución.
int esPalindromo(char * str,int x);
int main(){
printf("%i\n", esPalindromo("neuquen",0));
printf("%i\n", esPalindromo("hola",0));
return 0;
}
int esPalindromo(char * str, int x){
if(x==0){
x=1;
}
printf("%c %c\n", str[0], str[strlen(str)-x]);
if(str[0]==0){
return 1;
}
if(str[0]!=str[strlen(str)-x]){
return 0;
}
if(str[0]==str[strlen(str)-x]){
x++;
return esPalindromo(str+1, x);
}
return 0;
}
¿Pasa el testeo publicado? No deberías usar strlen en la función recursiva.
Ahora si? Pregunto mas que nada para saber si entendí bien el concepto de "wrapper" .
int wrapperPalindromo(char * str);
static int esPalindromo(char * str, int x);
int main(){
printf("%i\n", wrapperPalindromo("neuquen"));
printf("%i\n", wrapperPalindromo("aca"));
printf("%i\n", wrapperPalindromo("no es capicua"));
printf("%i\n", wrapperPalindromo("aaaa"));
return 0;
}
int wrapperPalindromo(char * str){
if(str[0]==0){
return 0;
}
return esPalindromo(str, 1);
}
static int esPalindromo(char * str, int x){
if(str[0]==0){
return 1;
}
if(str[0]!=str[strlen(str)-x]){
return 0;
}
if(str[0]==str[strlen(str)-x]){
x++;
return esPalindromo(str+1, x);
}
return 0;
}
Output:
1
1
0
1
Está bien el concepto de wrapper pero no está bien utilizada, podrías pasar algún otro valor más útil que 1, y así poder hacer lo que te mencioné en la respuesta anterior: "No deberías usar strlen en la función recursiva."
Hola, me gustaría saber si esta bien el declarar una variable static adentro de una función recursiva, porque no puedo llamar a la función dos veces.
También me gustaría saber como resolverlo. Muchas Gracias