某一个“天” 发表于 2024-5-3 09:41:24

代码达到了递归的最高限制 报错了怎么办----已解决

def count(h,m,s):
    top2.destroy()
    if h + m + s == 0:
      print("时间到了")
    else:
      print(h, m, s)
      time.sleep(1)
      s -= 1
      if s == -1 and (m > 0 or h > 0):
            m -= 1
            s = 59
      if m == -1 and h > 0:
            h -= 1
            m = 59
      count(h, m, s)

这是一个倒计时但是只能定时十几分钟
我看网上有人说可以调整最大递归限制但感觉不够稳妥
后来改成迭代就行了
{:10_256:}
def count(h,m,s):
    top2.destroy()
    while h + m + s != 0:
      print(h, m, s)
      time.sleep(1)
      s -= 1
      if s == -1 and m + h > 0:
            m -= 1
            s = 59
      if m == -1 and h > 0:
            h -= 1
            m = 59
    print("时间到了")

FishC 发表于 2024-5-3 09:41:35

你已经找到了解决问题的方法,将递归改成了迭代,这是一个很好的选择!

递归有一个限制,即递归的层数不能太深。这是因为每次函数调用都会将一些信息保存在内存中,当递归层数过多时,内存消耗会很大,导致程序崩溃。

你可以通过修改默认的最大递归限制来解决问题,但这是一个相对不稳妥的方法,因为如果你的倒计时时间非常长,甚至超过了修改后的限制,仍然会报错。

通过迭代的方法实现倒计时是一个更好的选择,因为迭代不会有递归层级的限制。你已经成功地将代码改写为迭代方式,可以运行较长时间的倒计时了!

如果你有其他编程问题,我会很愿意帮助你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 代码达到了递归的最高限制 报错了怎么办----已解决