逻辑基础案例

why*_*heq 0 python recursion

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

def subL(L):
    x=len(L)
    if x==0:
        return L
    else:
        print(L[:x]) 
        subL(L[:x-1])
Run Code Online (Sandbox Code Playgroud)

这是我用过的示例输入:

x = [23,2,5,77,8,9]
print(subL(x))
Run Code Online (Sandbox Code Playgroud)

这是输出:

[23, 2, 5, 77, 8, 9]
[23, 2, 5, 77, 8]
[23, 2, 5, 77]
[23, 2, 5]
[23, 2]
[23]
None
Run Code Online (Sandbox Code Playgroud)

这个函数的基本情况如何工作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]
Run Code Online (Sandbox Code Playgroud)

the*_*eye 6

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

return subL(L[:x-1])
Run Code Online (Sandbox Code Playgroud)

如果你想忽略最后None一个print,就像这样调用函数

subL(x)
Run Code Online (Sandbox Code Playgroud)

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

整个程序可以像这样缩短

def subL(L):
    if L:
        print(L)
        return subL(L[:-1])
Run Code Online (Sandbox Code Playgroud)