Program wykorzystujący rekurencję do sprawdzenia czy słowo jest palindromem

0

Cześć! Uczę się rekurencji, program ma sprawdzać czy słowo jest palindromem. Mam użyć rekurencji, umiem zrobić funkcję liczącą silnię, ale z palindromem mam problem, oto mój kod:


void palek(string wyraz, int i, int j)
{
	
	if (i < j)
	{
		if (wyraz[i] = wyraz[j])	palek(wyraz, i + 1, j - 1);
		else cout << "Wyraz nie jest palindromem" << endl;
	}
	else cout << "Wyraz jest palindromem" << endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
	string slowo;
	int dlugosc;

	cout << "Wprowadz wyraz : ";
		cin >> slowo;
	cout << endl;

	dlugosc = slowo.length()-1;
	
	palek(slowo, 0, dlugosc);

	

	system("pause");

	return 0;
}

 
1
 if (wyraz[i] = wyraz[j])

Na pewno chciałeś PRZYPISAĆ wartość wyraz[j] do wyraz[i]? Może jednak chciałeś coś porównać?
Poza tym przemyślałeś w ogóle JAK ten algorytm ma działać? Bo mam wrażenie że nie...
Przecież ta funkcja coś musi zwracać żebyś wiedział czy coś finalnie palindromem jest czy nie.

0

Próba pomocy:

Pomyśl jak mogłaby działać funkcja sprawdzająca czy wyraz jest palindromem? (Szczerze mówiac nie jest to IMO najoczywistszy problem do zastosowania rekurencji, ale.)
Wyraz jest palindromem jeśli:

  • pierwszy znak wyrazu jest równy ostatniemu znakowi wyrazu
  • podwyraz powstały po pominięciu pierwszego i ostatniego znaku jest palindromem
  • jest jednoznakowy lub napisem pustym (przyjmujemy że "" jest palindromem).
Inaczej mówiąc, sprawdzamy czy "kajak" jest palindromem:
 - pierwszy znak "kajak" = k = ostatni znak "kajak"
 - podwyraz powstały po pominięciu pierwszego i ostatniego znaku, czyli sprawdzamy czy "aja", jest palindromem:
    - pierwszy znak "aja" = a = ostatni znak "aja"
    - podwyraz powstały po pominięciu pierwszego i ostatniego znaku, czyli sprawdzamy czy "j", jest palindromem:
       - "j" jest napisem jednoznakowym więc jest palindromem.

Teraz przepisujac to na C++ czy czego używasz masz funkcję rekurencyjną.

0

@Shalom Masz rację, po zmianie na "==" wszytko działa poprawnie. Wzorowałem się na tym algorytmie: http://www.algorytm.org/przetwarzanie-tekstu/palindromy.html

0

@xorgx3 Piszę dwa posty pod rząd, bo nie wiem jak mam Ci odpisać. Dlaczego to nie jest funkcja rekurencyjna, przecież wywołuje samą siebie? Nie ma tutaj pętli, więc rozwiń proszę.

void palek(string wyraz, int i, int j)
{
	if (i < j)
	{
		if (wyraz[i] == wyraz[j])
		{
			palek(wyraz, i + 1, j - 1);
		}
		else cout << "Wyraz nie jest palindromem" << endl;
	}
	else cout << "Wyraz jest palindromem" << endl;
}
1

@Dopiero_zaczynam, spróbuj przerobić ten program tak aby dało się wprowadzić powiedzmy 5 wyrazów, zaś program ma wyświetlić ( tylko i wyłącznie ) czy większość wyrazów są palindromami.
Jeżeli funkcja sprawdzająca jeden palindrom musi przy takiej przeróbce ulec zmianie, oznacza to że źle ta funkcja zrobiona.

0

Dzięki za pomoc, pewnie niedługo odezwę się z innym problemem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1