Strona 1 z 1

[Python] funkcja palindrom rekurencyjnie

: 2 lis 2012, o 21:38
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

[Python] funkcja palindrom rekurencyjnie

: 2 lis 2012, o 23:33
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 ?