1
count = []

def problem14(n):
    count.append(n)
    if n == 1:
        return count
    if n % 2 == 0:
        n = n/2
        problem14(n)
    else:
        n = 3*n + 1
        problem14(n)


print problem14(13)

所以这是我写的代码。我不知道为什么它返回 None 而在我看来它应该返回列表'count'。有什么帮助吗?

4

2 回答 2

9

使用递归的时候还需要return语句,否则返回值会丢失:

def problem14(n):
    count.append(n)
    if n == 1:
        return count
    if n % 2 == 0:
        n = n/2
        return problem14(n)  # <--
    else:
        n = 3*n + 1
        return problem14(n)  # <--

顺便说一句,这可能是 Project Euler #14 的错误方法 :-) 考虑改用动态编程方法(这就是我要说的所有内容,以免破坏乐趣)。

于 2013-09-29T18:00:22.593 回答
1

您应该使用 return 关键字来return从函数中获取值。

return problem14(n)
于 2013-09-29T18:00:14.800 回答