python - 在python中制作递归函数

标签 python recursion

这是一道作业题。我尝试得到一个递归函数:

def problem_a(n):
    answer.append(n)
    if n == 1:
        return answer    
    elif n % 2 == 0:
        answer.append(n/2)
    else :
        answer.append(n*3 + 1)
        problem_a(n*3 + 1)

此代码显然不起作用,因为 answer 未定义为列表。使用循环它会起作用,但我想制作一个递归函数。我可以只使用列表作为输入,但我想知道是否存在更优雅的东西。

problem_a(7) 应该给出输出:

[7, 22, 11, 34, 17, 52, 26, 13, 40 , 20, 10 ,5 ,16, 8, 4, 2, 1]

最佳答案

目前已提出的解决方案(使用额外参数将列表向上传递到递归链)的一个替代解决方案是在您从递归返回时构建最终列表。这不是非常有效,因为连接列表需要复制它们,但它会起作用:

def problem_a(n):
    if n == 1:
        return [n]
    elif n % 2 == 0:
        return [n] + problem_a(n // 2)
    else:
        return [n] + problem_a(3*n + 1)

关于python - 在python中制作递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17146340/

相关文章:

python - 如何将 QLabel 转换为 QTableWidgetItem 以放入 QTableWidget

python - 过滤夹层中已发布的博客文章

php - 在 smarty 中处理递归的最佳方法是什么?

JavaScript:如何在它们的功能之外循环遍历这些项目?

algorithm - 时间复杂度算法

jquery逐字符显示字符串

java - 递归流API

python - 使用两列连接,从四个其他数据帧填充一个 pandas 数据帧中的列

python - 如何在 PySpark 的 UDF 中返回 "Tuple type"?

python - 如何在父坐标轴的角添加等宽内嵌坐标轴