klifka 2 years ago Hi everyone, small question. For lecture 6 I tried, before seeiing the answer, to write a bit of code for the palindrome problem. I wrote this: def IsPalin(word): if len(word)<=1: return 'input is palindrome' else: if word[0]!=word[-1]: return 'input is not a palindrome' else: word=word[1:-1] IsPalin(word) Ok, there is room for improv, but the issue is this: when I command eg print IsPalin('kook'), it prints None! If I switch the return statements by print statements it returns stat and! None, why is this?

1. wacsam

in fact,when the len(word)>2 ,the program doesn't make sense . I don't know ,too.

2. rsmith6559

This is a recursive function. Each "pass" creates a new, "deeper" stack frame. When it returns, it returns up through all the stack frames. Your call to IsPalin(word) doesn't "pass up" a decision. Try: return IsPalin(word) instead.

3. wacsam

can you speak more clearly

4. wacsam

I mean the mechanism

5. Ante

For words with more than one letter, IsPalin doesn't have a return part so when something like that comes in, it will return None. Imagine that you call a different function, like sqr(7) instead of IsPalin in the end without "return". What would it give you then?

6. Ante

Yeah, I think the confusing thing here is that recursion doesn't work like a while loop where you go through the loop a couple of times until you get a value. In recursion you basically return a value at the first step which is the returned value of another instance of the same function. So you need return at every step. A return of a return of a return of a return... :)

7. rsmith6559

This link should help: http://www.greenteapress.com/thinkpython/html/book006.html Recursion is section 5.8.