我有这个非常简单的递归函数:
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)
这是因为您没有返回递归函数的结果.将递归行更改为此
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)