如何递归附加到一个空列表?

How to recursively append to an empty list?

我是递归的新手,发现它很难掌握。如果我不能直接“触摸”它,我不知道如何附加一个空数组。如果它是一个字符串,我每次都会添加该值。如果是一个数字涉及乘法,我每次都可以乘,但是有了数组,我不知道该怎么办。

我不知道如何在无法直接“触摸”它的情况下追加到空数组。

这是我目前所做的:

def laugh(num):
  if num == 0:
    return []
  # This doesnt work since we can't append a function call. I'm unsure what to do.
  return laugh(num - 1).append("ha ")

打印(笑(3))-> [“哈,哈,哈”]

如果我可以 return 一串“Ha”来代替的话,我会很容易做到这一点。我可以 return 一个空字符串,然后为每个步骤添加一个“Ha”。

在这种情况下,您将通过在其上调用 append 来改变列表。你想要做的是 return 一个 new list:

def laugh(num):
  # base case
  if num == 0:
    return []
  # recursive case
  return ["ha"] + laugh(num-1)

你可以这样修改:

def laugh(num):
    if num == 0:
        return []
    haha = laugh(num-1)
    haha.append("ha")
    return haha

由于append 没有return 修改后的列表,您必须分两步完成。使用串联和三元运算符,您可以将其缩小为:

def laugh(num):
    return laugh(num-1) + ["ha"] if num else []