2016-01-29 127 views
0

ps:这个问题只是被标记为重复,并且已经有一个答案。问题是,这个问题与另一个问题不一样。在这个问题中,我已经知道我的代码出错了。我问为什么这是错的。Python递归函数输入

这是udacity,我被要求解决一个问题:

定义过程is_palindrome,即需要输入一个字符串,并返回一个 布尔值,表示如果输入的字符串是回文。

提示:

基本情况:'' =>True

递归案例:如果第一个和最后一个字符不匹配=>False

如果它们匹配,是中间回文?

def is_palindrome(s): 
    if s=='': 
     return True 
    else: 
     if s[0]!=s[-1]: 
      return False 
     else: 
      s=s[1:-1] 
      is_palindrome(s) 

而3输入的情况下尝试:

print is_palindrome('') 
#>>> True 
print is_palindrome('abab') 
#>>> False 
print is_palindrome('abba') 
#>>> True 

如果我离开我的代码那样,它会返回None的情况下,“阿爸”。它可以通过改变函数的最后一行到

return is_palindrome(s[1:-1]) 

固定请问为什么return事?即使没有回报,不应该只是一次又一次地运行功能is_palindrome()

回答

7

即使没有返回,它不应该一次又一次地运行函数is_palindrome()?

当然 - 它会一遍又一遍地运行它,但它不会有用的东西,所以你永远不会看到的结果。这是因为第一个is_palindrome调用将返回None,而不管递归调用的返回值为is_palindromeNone是没有指定返回值时的Python默认值)。

+0

当'is_palindrome'再次运行并再次检查时,已经有一些'return',但是这些run-again-inner'return'不会被返回? –

1

这个任务,不需要递归:

In [2]: "aloof"[::-1] 
Out[2]: 'foola' 

简单地解决它,继续前进。

+0

我知道如何轻松做到这一点。该课程仅将该问题用作递归函数如何有用的示例 –