как создать 2D-список с рекурсией, не передавая его в качестве аргумента рекурсивной функции, python - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь найти способ заставить эту функцию возвращать 2D-список всех подмножеств размера k группы n.п> = к.

функция принимает 2 числа, n, k, поэтому n> = k.и возвращает все возможности подмножества в размере k группы {1,2, ..., n-1}.

для примера, если параметры: fill_k_subsets (3,2),

функция выведет: [[0,1], [0,2], [1,2]]

, что является всеми возможными подмножествами длины 2 из группы{0,1,2} = {0,1, (3-1)} = {1, .., (n-1)} надеюсь, что это достаточно ясно.

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

def fill_k_subsets (n, k):

"""
this is the main function, can't accepts more parameters other then k and n. 
accepts n,k natural numbers, and an empty list
all subsets of size k should be stored inside of the empty list
the function does not return  or print anything

:param n:
:param k:
:param list:
:return:
"""

if k <= n:
    set_list= list
    current_subset = [False] * n

    k_fill_helper(current_subset, k, 0, 0, set)

def k_fill_helper (current_subset, k, index, выберите):

 #this is the recursive function.
 #not allowed to accepts any list as a parameter, nor part of the subset
# base case, if chose k items
if k == choose:
    fill_set_list(current_subset, set_list)
    return None
# if we reached to the end of the list
if index == len(current_subset):
    return None
# all subset that that include this index
current_subset[index] = True
k_fill_helper(current_subset, k, index + 1, choose + 1)

# all subset without that index
current_subset[index] = False
k_fill_helper(current_subset, k, index + 1, choose)

deffill_set_list (current_subset, set_list):

work_list=[]
for index, bool_element in enumerate(current_subset):
    if bool_element is True:
        work_list.append(index)

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