Напишите рекурсивный алгоритм, который отображает все подмассивы (упорядоченные подмножества последовательных элементов) данного массива - PullRequest
0 голосов
/ 28 октября 2019

Мне нужно написать рекурсивный алгоритм, который отображает все подмассивы (упорядоченные подмножества последовательных элементов) данного массива. Я придумал только нерекурсивную функцию, которая использует два цикла. Не могли бы вы дать мне какие-либо предложения о том, как сделать это рекурсивно

def sub_lists(my_list):
    subs = [[]]
    for i in range(len(my_list)):
        n = i+1
        while n <= len(my_list):
            sub = my_list[i:n]
            subs.append(sub)
            n += 1
    return subs

1 Ответ

0 голосов
/ 28 октября 2019

Если бы я правильно понял ваш вопрос, решение могло бы выглядеть следующим образом:

def f(y):
    if type(y[0]) != list:  # check if inside element is not list
        return ", ".join(map(str, y)) # door out of reucrsion
    return f(y[0])  # else another cycle of recursion


if __name__ == "__main__":
    x = [[[[[9, 10, 1, 2, 3]]]]]
    print(f(x))

Способ поиска суммы всех элементов вложенного списка:

def f(y):
    if type(y) != list:
        return y
    s = 0
    for i in y:
        s += f(i)
    return s


if __name__ == "__main__":
    x = [[5, [[[9]]]], [[[10]]], 1, [[[[[[[20]]]]]]]]
    print(f(x))

Способ извлечения всех вложенных элементов списка:

result = []


def f(y):
    if type(y) != list:
        result.append(y)
        return 0
    s = 0
    for i in y:
        s += f(i)
    return s


if __name__ == "__main__":
    x = [[5, [[[9]]]], [[[10]]], 1, [[[[[[[20]]]]]]]]
    print(f(x))
    print(result)
...