es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cadena Palíndromo

Cuando intento ejecutar este código, obtengo el resultado contrario. Por favor, avísenme qué estoy haciendo mal…
“`
#include <bits stdc++.h="">

using namespace std;

bool ps(string s, int l, int r){
if(l >= r)
return true;
if(s[l] != s[r])
return false;
return ps(s, ++l, –r);
}

int main(){
string str = "naman";
int s = str.size();
bool b = ps(str, 0, s);
if(!b){
cout << "No es un palíndromo";
}
else{
cout << "Es un palíndromo";
}
return 0;
}
“`

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    En primer lugar, los signos < y > en el código son entidades HTML para “<” y “>”, por lo que deben ser reemplazados por los símbolos reales para que el código se compile correctamente.

    El problema principal en el código es la lógica de recursión de la función ps. El código utiliza ++l y --r para mover los índices izquierdo y derecho entre sí, pero estos operadores modifican las variables originales, lo que produce resultados inesperados.

    En su lugar, la función debe utilizar l+1 y r-1 para crear nuevas variables que se pasen a la llamada recursiva. Por lo tanto, el código corregido para la función ps se vería así:

    bool ps(string s, int l, int r){
        if(l >= r) 
            return true;
        if(s[l] != s[r])
            return false;
        return ps(s, l+1, r-1);
    }
    

    Con esta corrección, el código debería identificar correctamente si la cadena de entrada es un palíndromo o no.

Comments are closed.