Я пытаюсь вызвать функцию внутри той же функции, которая была определена - PullRequest
0 голосов
/ 17 марта 2019

Я пытаюсь сделать это:

def enter():
    print("hi")
    enter()

Однако, сначала это дает мне:

hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi
hi

Однако после этого потока данных он начинает давать мнеошибки вроде этого:

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter
    enter()
  File "C:/Users/offcampus/AppData/Local/Programs/Python/Python35/len finder.py", line 11, in enter

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

Также было бы полезно, если бы кто-нибудь сказал мне, что вообще означает ошибка рекурсии.

Заранее спасибо !!!

1 Ответ

2 голосов
/ 17 марта 2019

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

Это называется переполнением стека, т. Е. Когда переполняется «стек» (память) компьютера (становится слишком высоким и вроде падает). Другие старые языки, такие как C, вообще не справляются с этим вообще , и переполнение стека вроде как стало предметом для программистов (именно поэтому это называется StackOverflow.com - чтобы помогать другим). со своими проблемами).

Чтобы избежать этого, Python устанавливает предел того, как далеко вы можете пройти, и превышение этого лимита вызовет ошибку (вместо того, чтобы сломать ваш компьютер). Чтобы ваш код не достиг этого (очень высокого) предела, вам нужно указать условие выхода . Здесь вы возвращаете вместо повторения. Это может быть так же просто, как оператор if, или более сложным. Это также имеет смысл. То, как оно у вас сейчас, очевидно, почему оно продолжает повторяться, вы никогда не говорите этого не делать.

...