#python #recursion #big-o
#python #рекурсия #big-o
Вопрос:
Для понимания рекурсии и ее производительности в Python я написал рекурсивную функцию, которая возвращает максимальное значение в списке:
def max_list(A):
print(id(A)) # debugging purposes
if len(A) > 1:
max_list_tail = max_list(A[:-1])
else:
max_list_tail = A[0]
if A[-1] > max_list_tail:
return A[-1]
else:
return max_list_tail
Идея этой функции заключается в том, что если последний элемент текущего списка больше максимума среди «хвоста» списка, то есть всех элементов, кроме последнего, последний является максимальным, в противном случае максимум хвоста является максимальным.
Как вы можете видеть, я передаю нарезанный список A[:-1]
в качестве параметра.
Вопросы:
- Правильно ли я говорю следующее: каждый раз, когда я передаю
A[:-1]
, создается новый список, который является копией моего старого списка, за исключением последнего элемента? В целях отладки я печатаю идентификатор каждого нарезанного списка, и идентификаторы разные, что наводит меня на мысль, что я прав, но мне нужно подтверждение от экспертного сообщества. - Если 1. да, это правда, какова временная сложность моей функции? Могу ли я сказать
O(n^2)
, что это связано с тем, что требуетсяO(n)
найти максимум в исходном списке иO(n)
создавать копию текущего списка каждый раз, когда я рекурсивно вызываю функцию?
Комментарии:
1. Да, он создает новый список. Да, ваша функция занимает
O(n^2)
некоторое время.