【发布时间】:2022-11-19 07:44:53
【问题描述】:
我需要定义一个递归函数,它接受两个参数(一个包含名称和一个初始值的列表),并返回一个包含所有以初始值开头的名称的新列表。
现在我得到了这段代码,但我不知道为什么它不起作用:
def filter_names(names, initial):
result = []
if names[0][0] == initial:
result.append(names[0])
else:
filter_names(names[1:], initial)
return result
【问题讨论】:
-
我觉得你可能应该做
result.extend(filter_names(names[1:], initial))而不是你在该行上的内容(在else:之后),但你应该提供示例输入和预期输出,以便我们可以运行和测试它。 -
每个递归调用都有自己的
result列表,并且您永远不会将来自一个递归调用的result发送回父级。要么通过将其作为参数传递之类的操作让它们共享同一个列表,要么使用返回的列表。 -
这是递归的一个糟糕例子。您是否在在线教程中阅读过此内容?另请注意,您的递归一旦遇到带有该首字母的 FIRST 名称就会停止。你不能使用
else:;您每次都需要递归,除非列表为空。 -
仔细想想其中的逻辑。当递归调用发生时,它是否能够附加到与父级相同的
result列表?不;它将创建它的自己的,完全独立的result,就像如果你打电话任何其他功能而不是使用递归。