我有一个函数,它递归地浏览一些数字列表,并找到可被某个除数整除的所有子集。有没有可能将其转换为循环解决方案的方法?
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
您可以使用显式堆栈来保留中间解决方案:
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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。