Нахождение максимального числа пар в списке - PullRequest
0 голосов
/ 28 октября 2019

Проблема, которую я должен решить, - создать список максимумов для пар в большом списке, используя рекурсию. Например, предположим, что на входе [[2,4], [6,7], [9,9], [2,1]] мне нужно найти максимум каждой отдельной пары, поэтому желаемый результат равен [4, 7,9,2]. В настоящее время у меня есть

def twoMax(xlst):
    def mymax(x,y):
        if x > y:
            return x
        else:
            return y
    return_lst = []
    if xlst == []:
        return []
    else:
        for i in xlst:
            return_lst.append(mymax(i[0],i[1]))
            return twoMax(xlst[1:])
    return return_list

Функция mymax просто используется, чтобы найти максимум проще. То, что я пытался сделать, это создать return_list, где при прохождении рекурсии он будет добавлять максимумы в список. Насколько я понимаю, в каждом стеке с помощью рекурсии создается отдельное return_list.

РЕДАКТИРОВАТЬ: проблема с текущим кодом заключается в том, что он возвращает пустой список. РЕДАКТИРОВАТЬ 2: Опечатка в примере я желаю, чтобы максимумы не мин

Ответы [ 2 ]

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

Вы смешиваете рекурсию и итерацию.

return twoMax(xlst[1:]) избыточен, так как он всегда будет выполняться, и передаст хвост текущего списка в качестве аргумента, что приведет к повторному вызову twoMax иснова до тех пор, пока xlst не станет пустым, что вернет [].

Удалите эту строку, и ваш код заработает.

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

def twoMax(xlst, return_lst=[]):
    def mymax(x,y):
        if x > y:
            return x
        else:
            return y

    if xlst == []:
        return return_lst
    else:
        first_item = xlst[0]
        return_lst.append(mymax(first_item[0],first_item[1]))
    return twoMax(xlst[1:], return_lst)

Этот алгоритм добавляет максимум first_item из xlst к return_lst (изначально пустой список), а затем снова вызывает twoMax дляхвост xlst до тех пор, пока xlst не станет пустым, после чего он возвращает return_lst.

1 голос
/ 28 октября 2019
def twoMax(xlst):
    if xlst == []:
        return []
    else:
        return [ max(xlst[0]) ] + twoMax(xlst[1:])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...