我有这个非常简单的递归函数:
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]
答案 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])