[Python] funkcja palindrom rekurencyjnie

ct985
Użytkownik
Użytkownik
Posty: 184
Rejestracja: 13 paź 2011, o 20:36
Płeć: Kobieta
Lokalizacja: Warszawa
Podziękował: 71 razy

[Python] funkcja palindrom rekurencyjnie

Post autor: ct985 »

Mam problem z funkcją rekurencyjną, która sprawdza czy dany ciąg jest palindromem.
Moje dotychczasowe próby:

Kod: Zaznacz cały

def rec_pal(s):
	zmienna=False
	if len(s)==1:
		zmienna=True
	if len(s)==2:
		if s[0]==s[1]:
			zmienna=True
		zmienna=False
	elif len(s)>2:
		for i in range(len(s)-2):
			s1=s[i]+s[len(s)-i-1]
			rec_pal(s1)
	return zmienna
knrdk
Użytkownik
Użytkownik
Posty: 36
Rejestracja: 12 mar 2009, o 13:54
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 5 razy
Pomógł: 7 razy

[Python] funkcja palindrom rekurencyjnie

Post autor: knrdk »

Pierwszy błąd masz tutaj:

Kod: Zaznacz cały

if len(s)==2:
      if s[0]==s[1]:
         zmienna=True
      zmienna=False
Nawet jeśli s[0]==s[1] to zmienna i tak będzie miała wartość False, to drugie przypisanie powinnaś dać po else. Albo można też pozbyć się przypisywanie do zmiennej i dać return, wtedy obejdzie się bez else.

Drugi błąd jest taki że twoje rekurencyjne wywołania nie mają żadnego efektu, powinno być tak:

Kod: Zaznacz cały

zmienna = zmienna & rec_pal(s1)
Z tym że na początku ustawiasz zmienna na True.

Program będzie wtedy działał, tyle że ta rekurencja jest tutaj wstawiona trochę na siłę (można po prostu sprawdzić czy s != s[len(s)-i-1]). Zastanów się czy nie lepiej byłoby (jeśli masz to napisać rekurencyjnie) sprawdzać czy pierwsza i ostatnia litera są takie same, a jeśli tak to wywoływać funkcję rekurencyjnie dla tego co jest w środku ?
ODPOWIEDZ