开发者社区> 问答> 正文

如何将子集查找递归转换为循环?

我有一个函数,它递归地浏览一些数字列表,并找到可被某个除数整除的所有子集。有没有可能将其转换为循环解决方案的方法?

def subset_sums(arr, l, r, dvr, summed = False, summ = 0): 

    d_count = 0

    if summed and summ % dvr == 0:
        d_count = 1

    if (l > r):
        return d_count

    d_count += subset_sums(arr, l + 1, r, dvr, True, summ + arr[l])
    d_count += subset_sums(arr, l + 1, r, dvr, False, summ) 

    return d_count

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 09:41:16 486 0
1 条回答
写回答
取消 提交回答
  • 您可以使用显式堆栈来保留中间解决方案:

    stack = []
    stack.add((l, r, False, 0))
    
    while stack:
        cur_state = stack[-1]
        stack.pop()
    
        # doing something useful, updating sums and indices, checking necessary conditions
        stack.add((updated_l, updated_r, updated_summed, updated_sum))
    

    这模仿了递归,但将所有内容保留在内存堆中,并且不依赖于堆栈的大小。

    回答来源:stackoverflow

    2020-03-24 09:41:23
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
重新定义计算的边界 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载