#include <iostream>
using namespace std;
int k=0;
bool palindrom(string slowo, int poczatek, int koniec, int srodek){
if (k==srodek){
return true;}
else if (slowo[poczatek]==slowo[koniec-1] and k<srodek)
{
k++;
palindrom(slowo, poczatek+1, koniec-1, srodek);
}
else return false;
}
int main()
{
string podane_slowo;
int koniec, srodek, poczatek=0;
cout<<"Podaj slowo \n";
cin>>podane_slowo;
koniec=podane_slowo.length();
srodek=koniec/2;
if (palindrom(podane_slowo, poczatek, koniec, srodek)==false){
cout<<"To nie jest palindrom\n";}
else { cout<<"To jest palindrom!\n";}
system("pause");
return 0;
}
Dla słowa np
ax..........ba
pokaże, że to jest palindrom. Dlaczego? "k" ma się inkrementować tylko jeżeli sprawdzane znaki są identyczne. Zwrócenie true ma być tylko wtedy gdy k==srodek, a przy takim słowie jak to powyżej, k nie będzie równe srodek. W takim razie dlaczego wynik będzie true? Mimo tego, że już przy drugim sprawdzeniu: slowo[poczatek]==slowo[koniec-1] funkcja ma zwrócić false i już się nie wywoływać?