Python turtle递归绘图报Maximum recursion depth exceeded错误求解
递归报错原因及修复方案
- 核心错误原因:递归函数未设置正确的终止逻辑
你写的两个递归函数中,hexagon(n-1)、square(n-1)的调用写在了if n>=1判断的外部,不管n是否满足大于等于1的条件,函数都会持续调用自身,n会不断递减为负数、无限递归下去,直到超过Python默认的最大递归深度限制(默认约1000层),触发Maximum recursion depth exceeded in comparison报错。 - 为什么分开运行时看似正常
Python默认递归深度为1000层,你单独调用hexagon(100)时,从n=100到n=-899才会触达递归深度上限,而绘图逻辑仅在n>=1时执行,100层递归就已经完成了所有绘图操作,后续的无效递归你没有感知到,误以为程序正常执行结束,实际上等待足够长时间后,单独运行也会抛出同样的报错。两个函数串联运行时,前一个函数已经消耗了部分递归深度,后一个函数运行时更快触达上限,所以立刻报错。
修复方案
将递归调用挪到if n>=1的分支内部,当n<1时函数直接终止,不再递归,修复后可正常运行的代码如下:
import turtle t = turtle.Turtle() def hexagon(n): if n>=1: t.forward(n) t.left(60) hexagon(n-1) # 递归调用放在if分支内,n<1时自动终止 hexagon(100) turtle.clearscreen() def square(n): if n>=1: t.forward(n*5) t.right(90) square(n-1) # 递归调用放在if分支内,n<1时自动终止 square(50) turtle.done()
内容的提问来源于stack exchange,提问作者Rozi Harutyunyan
相关产品推荐
相关产品推荐

