Python 如何递归地附加到空列表?

Python 如何递归地附加到空列表?,python,recursion,computer-science,Python,Recursion,Computer Science,我不熟悉递归,觉得它很难掌握。如果我不能直接“触摸”空数组,我就不知道如何附加它。如果它是一个字符串,我会每次添加值。如果它是一个涉及乘法的数字,我每次都可以将它相乘,但是对于一个数组,我不知道该怎么做 我不知道如何附加到一个空数组,而不能够直接“触摸”它 这就是我到目前为止所做的: def laugh(num): if num == 0: return [] # This doesnt work since we can't append a function call. I'

我不熟悉递归,觉得它很难掌握。如果我不能直接“触摸”空数组,我就不知道如何附加它。如果它是一个字符串,我会每次添加值。如果它是一个涉及乘法的数字,我每次都可以将它相乘,但是对于一个数组,我不知道该怎么做

我不知道如何附加到一个空数组,而不能够直接“触摸”它

这就是我到目前为止所做的:

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))->[“哈哈哈”]
如果我可以返回一串“Ha”,那么我就可以很容易地做到这一点。我可以返回一个空字符串,只需为每个步骤添加一个“Ha”。

在本例中,通过调用append对列表进行修改。您要做的是返回一个新的列表:

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

在这种情况下,通过调用append对列表进行修改。您要做的是返回一个新的列表:

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
不会返回修改后的列表,因此必须分两步执行。使用串联和三元运算符,可以将其缩小为:

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

您可以修改它,如下所示:

def laugh(num):
    if num == 0:
        return []
    haha = laugh(num-1)
    haha.append("ha")
    return haha
由于
append
不会返回修改后的列表,因此必须分两步执行。使用串联和三元运算符,可以将其缩小为:

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

append
不返回新对象,而是修改现有对象。因此
return laugh.append()
只是
None
您可以返回
laugh(num-1)+[“ha”]
append
不返回新对象,而是修改现有对象。所以
return laugh.append()
只是
None
你可以返回
laugh(num-1)+[“ha”]
你能解释一下我为什么返回一个新列表吗?我有点困惑?因为基本情况将返回[],下一步将变成[]+[“ha”]。编辑-哦,我想用python你可以将列表添加到另一个列表中进行附加?!所以它不同于将一个列表附加到另一个列表,因为这是变异。它正在创建一个新的列表,这是将两个列表合并而没有任何变异的结果。这类似于lisp或基于lambda演算的语言中的(cons…empty)。您能解释一下我为什么返回一个新列表吗?我有点困惑?因为基本情况将返回[],下一步将变成[]+[“ha”]。编辑-哦,我想用python你可以将列表添加到另一个列表中进行附加?!所以它不同于将一个列表附加到另一个列表,因为这是变异。它正在创建一个新的列表,这是将两个列表合并而没有任何变异的结果。这类似于lisp或基于lambda演算的语言中的(cons…empty)。