shi*_*sho 1 python algorithm recursion
所以我从Think Python的第7章开始练习6,它让我感到很奇怪,我作为解决方案编写的这段代码不起作用:
def is_palindrome(word):
if len(word) <= 1:
return True
elif first(word) == last(word):
is_palindrome(middle(word))
else:
return False
Run Code Online (Sandbox Code Playgroud)
它不会进入任何递归,我不知道为什么.对于长度超过1个字符的单词,它返回None.为什么是这样?当单词的长度达到1或更小时,它应该返回True!为什么不起作用?
PS:这是第一个,最后一个和中间的定义:
def first(word):
return word[0]
def last(word):
return word[-1]
def middle(word):
return word[1:-1]
Run Code Online (Sandbox Code Playgroud)
你错过了一个return:
def is_palindrome(word):
if len(word) <= 1:
return True
elif first(word) == last(word):
return is_palindrome(middle(word)) # <--
else:
return False
Run Code Online (Sandbox Code Playgroud)
因此,None一旦elif输入了块,您的当前片段就会返回,因为那里没有明确的return语句.换句话说,你做计算is_palindrome(middle(word)),但你没有对结果做任何事情.
也许通过一个简单的例子会有所帮助.考虑使用以下参数调用原始函数'aba':
word 就是现在 'aba'len(word) <= 1是False, - if没有进入.first(word) == last(word)是True,elif-body输入:
word 就是现在 'b'len(word) <= 1是True,if-body输入:
True 回return在elif)None 回