def list_copy_rec(list_1, i):
    if i == len(list_1):
        return []  
    return [list_1[i]] + list_copy_rec(list_1, i + 1)

我不确定空间的复杂性是什么.

该算法非常简单,其目的是将输入的列表复制到另一个列表.它使用堆栈递归,我认为空间复杂性为O(N),但我不太确定,因为+运算符每次都会创建一个额外的列表(但它可能被垃圾收集器删除),而且考虑到它是堆栈递归,它使用内存将未完成的操作保存到最后(但我也不确定这是否会影响最终的内存使用).我是分析算法复杂性的初学者,所以请注意:)

推荐答案

算法使用递归是正确的,每个递归调用都会向堆栈中添加一个新的帧.因此,对于长度为(N)的列表,堆栈深度将为(O(N)).这是空间复杂性的第一个组成部分.

关于创建新列表的+操作符:虽然在每次递归调用时都会创建一个新列表,但旧列表在不再使用后将被垃圾收集.然而,所有这些列表的大小的总和仍将对整体空间复杂性做出贡献.

综合这两个因素,总体空间复杂度为(O(N)+O(N)=O(N)).

所以,是的,你是对的:空间复杂性是(O(N)).

Python相关问答推荐

如何在超时的情况下同步运行Matplolib服务器端?该过程随机挂起

如何从FDaGrid实例中删除某些函数?

当密钥是复合且唯一时,Pandas合并抱怨标签不唯一

如何使用Google Gemini API为单个提示生成多个响应?

numba jitClass,记录类型为字符串

Python上的Instagram API:缺少client_id参数"

未删除映射表的行

如何在虚拟Python环境中运行Python程序?

"使用odbc_connect(raw)连接字符串登录失败;可用于pyodbc"

如何调整QscrollArea以正确显示内部正在变化的Qgridlayout?

在Python argparse包中添加formatter_class MetavarTypeHelpFormatter时, - help不再工作""""

cv2.matchTemplate函数匹配失败

当我try 在django中更新模型时,模型表单数据不可见

启用/禁用shiny 的自动重新加载

为什么'if x is None:pass'比'x is None'单独使用更快?

Python避免mypy在相互引用中从另一个类重定义类时失败

如何求相邻对序列中元素 Select 的最小代价

Pandas在rame中在组内洗牌行,保持相对组的顺序不变,

比较两个有条件的数据帧并删除所有不合格的数据帧

随机森林n_估计器的计算