Как перевести рекурсию поиска подмножества в al oop? - PullRequest
0 голосов
/ 12 марта 2020

У меня есть функция, которая рекурсивно просматривает некоторый список чисел и находит все его подмножества, которые делятся на некоторый делитель. Есть ли какой-нибудь возможный способ перевести его в решение al oop?

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

1 Ответ

1 голос
/ 12 марта 2020

Вы можете использовать явный стек для хранения промежуточных решений:

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))

Это имитирует рекурсию, но сохраняет все в куче памяти и не зависит от размера стека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...