为什么我一直收到"超过最大递归深度"的错误提示?
为什么我一直收到"超过最大递归深度"的错误提示?
我正在编写一个猜数字游戏的代码,并且必须使用递归来完成。但是当我执行它时,出现了“递归深度超过最大限制”的错误。为什么会这样呢?\n这是我的代码:\n
import random n = random.randrange(0,100) guess = int(input("请输入一个数字:")) def game(guess): if guess == n: print("你猜对了。") elif guess > n: print("你猜的数字太大了") game(guess) elif guess < n: print("你猜的数字太小了") game(guess) game(guess)
为什么我一直得到"最大递归深度超过限制"错误?
当你运行这段代码时,你可能会遇到一个名为"最大递归深度超过限制"的错误。这个错误的原因是因为你的代码中存在一个递归函数,该函数在某些情况下可能会无限递归,导致递归深度超过Python的默认限制。
在这段代码中,我们定义了一个名为"game"的函数,这个函数接受一个名为"guess"的参数。在函数内部,我们使用一个while循环来检查猜测的数字是否与随机生成的数字相等。如果猜测的数字不相等,我们会根据猜测的数字与随机生成的数字的大小关系给出相应的提示,并要求用户重新输入一个数字进行猜测。直到猜测的数字与随机生成的数字相等,循环才结束。
然而,在这段代码中存在一个问题。当我们调用"game"函数时,我们传递了一个初始的"guess"参数,但在while循环内部并没有再次调用"guess = int(input("Introduce a number: "))"来更新"guess"的值。这导致了在while循环内部,"guess"的值没有更新,始终保持着初始值,从而导致了无限循环。
为了解决这个问题,我们需要在while循环内部添加"guess = int(input("Introduce a number: "))"这行代码,以更新"guess"的值。这样,每次循环时"guess"的值都会被用户重新输入的数字所更新,循环最终会在猜测正确时结束。
修复后的代码如下所示:
import random n = random.randint(0, 100) guess = int(input("Introduce a number: ")) def game(guess): while guess != n: if guess > n: print("Your guess is too high") elif guess < n: print("Your guess is too low") guess = int(input("Introduce a number: ")) else: print("Your guess is correct.") game(guess)
现在,当你运行修复后的代码时,你将不再遇到"最大递归深度超过限制"的错误。
为什么我一直收到“最大递归深度超过”错误?
你的游戏函数不需要任何参数。你需要使用else
而不是最后一个elif
,并且guess = int(input("Introduce a number: "))
步骤应该在你的游戏函数中(已经测试过):
import random n = random.randrange(0,100) def game(): guess = int(input("Introduce a number: ")) if guess == n: print("Your guess is correct.") elif guess > n: print("Your guess is too high") game() else: print("Your guess is too low") game() game()
如果你在这个游戏中表现糟糕,那么这个方法将无法很好地运行。我确定Sebastian的老师希望他的作业使用递归函数 🙂
这有点牵强。递归在这里没有用武之地,我怀疑任何称职的老师会鼓励以注定会失败的方式编写代码。
这是理解递归函数工作原理的基本任务。我在工程部门中多次看到过这种情况 🙂
啊,我错过了问题中说需要递归的部分。不管怎样,有更好的方法来教授递归,而这不是适合它的用例。好吧。
我设法修复了这个问题。我太蠢了,没有注意到我没有要求输入新的猜测,所以它一直循环使用第一个猜测,显然会崩溃。但我已经修复了它,我甚至还加了一个猜测计数器,所以一切都好了。感谢大家的帮助。
为什么会出现"maximum recursion depth exceeded"错误?
出现这个错误的原因是,除非在第一次调用函数时guess
等于n
,否则会出现无限递归。这是因为你在调用game
函数时使用了相同的guess
的值。你没有提供任何停止递归的方法。
解决这个问题的方法是,在调用game
函数之前,先添加一个判断条件,当guess
等于n
时,停止递归。可以使用if
语句来实现这个条件判断。
下面是一个示例代码,演示了如何在递归函数中添加停止条件:
def game(guess, n): if guess == n: return guess else: return game(guess + 1, n) n = 10 guess = 1 result = game(guess, n) print(result)
在这个示例中,我们将n
设置为10,并将guess
设置为1。在调用game
函数时,如果guess
等于n
,则返回guess
的值。否则,递归调用game
函数,并将guess
的值加1。通过这种方式,我们可以避免无限递归,并在满足停止条件时停止递归。
希望这个解决方法能帮助你解决"maximum recursion depth exceeded"错误。如果你还有其他问题,请随时提问。