Python递归函数(展平(数据))

Python递归函数(展平(数据)),python,Python,首先,我很抱歉我的英语说得不好,所以你不能理解我的解释 为什么在“#1”中使用“输出+=展平(项)” 我不能只使用“展平(项目)”吗?在“#1”中使用的是将展平(项目)的返回值附加到输出列表中 仅使用展平(项目)不会修改输出 另外,当我运行您的代码时,print(data,“end”,output)在每次递归结束时都会执行。您能分享“C/C++”递归函数代码吗?@MoosaSaadat恐怕这是不可能的。没有C/C++语言。除非有人在过去的几周里把它写成了一个笑话。这个问题是关于递归的本质。只要还

首先,我很抱歉我的英语说得不好,所以你不能理解我的解释

为什么在“#1”中使用“输出+=展平(项)”


我不能只使用“展平(项目)”吗?

在“#1”中使用的是将
展平(项目)
的返回值附加到输出列表中

仅使用
展平(项目)
不会修改
输出


另外,当我运行您的代码时,
print(data,“end”,output)
在每次递归结束时都会执行。

您能分享“C/C++”递归函数代码吗?@MoosaSaadat恐怕这是不可能的。没有C/C++语言。除非有人在过去的几周里把它写成了一个笑话。这个问题是关于递归的本质。只要还有更多的工作要做,递归函数就会不断地调用自己。在#1案例中,还有更多的工作要做,收集列表中的数据。在#2的情况下,对象不是列表,因此它停止。+=累加一路上记录的数据,没有+=,没有收集到数据。我想,在句子中,每一个对象都会存储在输出中。然而,我并不这么想。每个递归函数都有多个输出吗?对不起。。。我误解了。显然,最后一句话被反复执行。
def flatten(data):
    output = []
    print(data, "start", output)
    for item in data:
        if type(item) == list:
            output += flatten(item) # 1
        else:
            output += [item] # 2
    print(data, "end", output)
    return output  


example = [[1, 2, 3], [4, [5, 6]], 7, [8, 9]]
print("originally : ", example)
print("transformation : ", flatten(example))