简单递归失败的python

简单递归失败的python,python,recursion,Python,Recursion,我对此感到困惑,我怀疑我犯了一个极其微小的错误,但无论如何,这就是: 我想用元素递归地填充列表。让我们做一个简单的例子。我只想用以下方式反转列表: def recurse(x, remaining): if len(remaining) == 0: assert x == [3, 2, 1] # This does not raise???? return x x.append(remaining.pop()) recurse(x, re

我对此感到困惑,我怀疑我犯了一个极其微小的错误,但无论如何,这就是:

我想用元素递归地填充列表。让我们做一个简单的例子。我只想用以下方式反转列表:

def recurse(x, remaining):

    if len(remaining) == 0:
        assert x == [3, 2, 1] # This does not raise????
        return x
    x.append(remaining.pop())
    recurse(x, remaining)

x = [1, 2, 3]
y = recurse([], x)

但是
y
是None,即使我在返回之前明确检查该值是否如预期的那样。我遗漏了什么?

只有递归中的最后一个调用会返回某些内容,其他调用都不会返回任何内容。您缺少的是将返回值传递到函数的最顶层调用,如下所示:

def recurse(x, remaining):

    if len(remaining) == 0:
        assert x == [3, 2, 1] # This does not raise????
        return x
    x.append(remaining.pop())
    return recurse(x, remaining)

x = [1, 2, 3]
y = recurse([], x)

只有递归中的最后一个调用会返回某些内容,其他调用都不会返回任何内容。您缺少的是将返回值传递到函数的最顶层调用,如下所示:

def recurse(x, remaining):

    if len(remaining) == 0:
        assert x == [3, 2, 1] # This does not raise????
        return x
    x.append(remaining.pop())
    return recurse(x, remaining)

x = [1, 2, 3]
y = recurse([], x)

返回值必须返回,即使在递归函数中也是如此。你是什么意思?如果块返回,则返回
块的另一侧,是。是否在
if
块之外?没那么多。@pilu看看@FlyingTeller的回答中的
返回递归(x,剩余)
。。太尴尬了:P谢谢大家!返回值必须返回,即使在递归函数中也是如此。你是什么意思?如果
块返回,则返回
块的另一侧,是。是否在
if
块之外?没那么多。@pilu看看@FlyingTeller的回答中的
返回递归(x,剩余)
。。太尴尬了:P谢谢大家!另外,
assert
没有抛出任何错误,因为它执行的唯一时间,
x
正好有这个值
[3,2,1]
而且,
assert
没有抛出任何错误,因为它执行的唯一时间,
x
正好有这个值
[3,2,1]