Почему эта функция не превышает Python предел рекурсии? - PullRequest
0 голосов
/ 08 апреля 2020

Я пишу функцию быстрой сортировки, вот код:

def quick_sort(list_demo = [x for x in range(1100000)]):
    if not list_demo:
        return []
    else:
        # pivot = list_demo[0]
        lst = [list_demo[0], list_demo[-1], list_demo[len(list_demo) // 2]]
        pivot = sorted(lst)[1]
        smaller = quick_sort([n for n in list_demo[1:] if n <= pivot])
        bigger = quick_sort([n for n in list_demo[1:] if n > pivot])
        global times
        times += 1
        print("now is ", times)
        return smaller + [pivot] + bigger

И, как я знаю, Python имеет предел рекурсии по умолчанию = 1000, но мой код успешно выполняется

После поиска переполнения стека я не нашел никакой связанной информации о том, что такое глубина рекурсии, поэтому я хочу узнать, в Python, каков предел глубины рекурсии? время вызова функции или глубина родительского дерева ?

Захват:

введите описание изображения здесь

введите описание изображения здесь

1 Ответ

0 голосов
/ 09 апреля 2020

Спасибо, ребята, наконец-то я понял это.

Я забыл, как работает программа:

  1. большая строка не будет работать, пока не закончится меньшая строка
  2. меньшая строка продолжит вызывать quick_sort () снова
  3. и снова, вторая меньшая вызовет 3-й quick_sort.
  4. примерно в log2 (1000000) раз, меньшие строки все заканчиваются sh
  5. , поэтому самое большое время вызова всего в 20 раз, что намного меньше, чем предел рекурсии.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...