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;
}
“`
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
yr-1
para crear nuevas variables que se pasen a la llamada recursiva. Por lo tanto, el código corregido para la funciónps
se vería así:Con esta corrección, el código debería identificar correctamente si la cadena de entrada es un palíndromo o no.