我试图在已定义的同一函数内调用一个函数

问题描述 投票:0回答:1

我想这样做:

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

它说我已达到最大深度的递归错误,有人可以告诉我如何解决这个问题。

此外,如果有人告诉我什么递归错误甚至意味着,将不胜感激。

提前致谢!!!

python python-3.5
1个回答
2
投票

在其内部调用函数称为递归,并且是循环的替代。但它需要付出代价。 Python需要“记住”以前对函数的所有调用,而不是每次都重置的循环。因此,您可以理解为什么最终您的计算机将耗尽内存,因为您不会停止调用enter

这称为堆栈溢出 - 即,当计算机的“堆栈”(内存)溢出时(变得太高而且有点摔倒)。其他较老的语言,例如C,根本不能很好地处理这个问题,而堆栈溢出有点成为程序员处理的事情(这就是为什么这称为StackOverflow.com - 帮助其他人处理他们的问题)。

为了避免这种情况,Python设置了一个限制,你可以在多大程度上递归,并且通过这个限制将引发错误(而不是破坏你的计算机)。为防止代码达到此(非常高)限制,您需要指定退出条件。这是您返回而不是再次递归的地方。这可以像if语句一样简单,也可以更复杂。这也很有道理。你现在的方式,很明显为什么它一直在递归,你永远不会告诉它。

© www.soinside.com 2019 - 2024. All rights reserved.