逻辑基础案例

时间:2014-01-14 14:12:12

标签: python recursion

我有这个非常简单的递归函数:

def subL(L):
    x=len(L)
    if x==0:
        return L
    else:
        print(L[:x]) 
        subL(L[:x-1])

这是我用过的示例输入:

x = [23,2,5,77,8,9]
print(subL(x))

这是输出:

[23, 2, 5, 77, 8, 9]
[23, 2, 5, 77, 8]
[23, 2, 5, 77]
[23, 2, 5]
[23, 2]
[23]
None

此功能的基本情况如何运作if x==0: return L?这是我在输出中获得None的原因吗? 可以修改为简单的产品:以下?

[23, 2, 5, 77, 8, 9]
[23, 2, 5, 77, 8]
[23, 2, 5, 77]
[23, 2, 5]
[23, 2]
[23]

2 个答案:

答案 0 :(得分:6)

这是因为你没有返回递归函数的结果。将递归行更改为此

return subL(L[:x-1])

如果您想单独忽略上一个None,请调用不带print的函数,就像这样

subL(x)

如果您没有显式返回任何内容,Python默认会返回None。这就是为什么你看到None被打印出来的原因。

整个程序可以像这样缩短

def subL(L):
    if L:
        print(L)
        return subL(L[:-1])

答案 1 :(得分:1)

稍加重写,就可以了。

def subL(L):
    if not L:
        return
    else:
        print L
        subL(L[:-1])