我在某种程度上是python的新手,但我正在尝试创建一个递归函数,它的工作方式就像内置的range函数:
def Range (lo, hi):
if lo >= hi:
return []
else:
return [lo, Range (lo+1,hi)]
但它返回多个列表。
它返回的是[3,[4,[5,[6,[]]]]]
,而不是我想要的[3,4,5,6]
。这是为什么?我该如何修复它?
发布于 2011-11-16 02:54:17
您的Range
函数返回一个列表,因此在您的最后一行中,您将返回一个列表中的列表。您可能应该做的是维护一个累加器,并向其添加值:
def Range(lo, hi, acc=None):
if acc is None:
acc = []
if lo >= hi:
return acc
else:
acc.append(lo)
return Range(lo+1, hi, acc)
发布于 2011-11-16 02:54:15
def Range (lo, hi):
if lo >= hi:
return []
else:
return [lo] + Range (lo+1, hi)
但你可能会得到StackOverflow
发布于 2011-11-16 02:55:56
每次递归到Range都会返回一个列表,该列表是前一次递归的列表中的第二个元素。当然是Python has a built-in function for this,但是如果您想自己构建它,您可能只想以
return [lo] + Range(lo+1, hi)
https://stackoverflow.com/questions/8141482
复制相似问题