Python递归函数输入

Vũ *_*hĩa 0 python recursion function

ps:这个问题只是标记为重复,已经有了答案.问题是,这个问题与另一个问题不一样.在这个问题上,我已经知道我的代码出错了.我问为什么这是错的.

这是我要求解决的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)
Run Code Online (Sandbox Code Playgroud)

尝试3个输入案例:

print is_palindrome('')
#>>> True
print is_palindrome('abab')
#>>> False
print is_palindrome('abba')
#>>> True
Run Code Online (Sandbox Code Playgroud)

如果我保留我的代码,那么对于案例'abba',它将返回None.可以通过将函数的最后一行更改为可以修复

return is_palindrome(s[1:-1])
Run Code Online (Sandbox Code Playgroud)

请问为什么这return件事?即使没有返回,它不应该只是is_palindrome()一次又一次地运行该功能吗?

mgi*_*son 7

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

当然 - 它会一遍又一遍地运行它,但它不会返回任何有用的东西,所以你永远不会看到结果.这是因为第一次is_palindrome调用将返回None独立于递归调用的返回值is_palindrome(None当您没有指定返回值时是Python的默认值).