递归函数不返回值

时间:2015-03-29 00:18:13

标签: python

递归函数似乎没有返回值。这是我在Goodrich的数据结构书中看到的片段的修改版本。但是,如果将return语句更改为print语句并删除了对x的赋值,则结果将正确打印到屏幕上。有什么想法吗?

def reverse(S, start, stop):
    if start < stop - 1:
        S[start], S[stop-1] = S[stop-1], S[start]
        reverse(S, start+1, stop-1)
    else:
        return S


if __name__ == "__main__":
    x = reverse([1, 2, 3], 0, 3)
    print x

2 个答案:

答案 0 :(得分:4)

非常接近。

考虑:

def reverse(S, start, stop):
    if start < stop - 1:
        S[start], S[stop-1] = S[stop-1], S[start]
        return reverse(S, start+1, stop-1)   # This should return as well
    else:
        return S


if __name__ == "__main__":
    x = reverse([1, 2, 3], 0, 3)
    print x

输出:

[3, 2, 1]

您的基本案例不仅会返回一些内容,而且在递归算法不是基本案例的情况下,您应该返回递归调用的输出。

答案 1 :(得分:1)

我想错过了回报:

def reverse(S, start, stop):
    if start < stop - 1:
        S[start], S[stop-1] = S[stop-1], S[start]
        return reverse(S, start+1, stop-1)
    else:
        return S

这将导致:[3, 2, 1]