为什么我的python程序不能永远运行?”“意外退出”

2024-04-27 20:40:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我在做一道数学题,要求我将数字相乘并检查它们是否是回文。你知道吗

import sys
sys.setrecursionlimit(1000000)
import time

def values():
    x=999
    y=999
    product=0
    generator(x,y,product)

def generator(x,y,product):
    while x >= 900:
        product=x*y
        strp=str(product)
        check=strp[::-1]
        print (check)
        time.sleep(0.1)
        if strp==check:
            print ("done")
        x=x-1
    else:
        y=y-1
        generator(x,y,product)

values()

我使用的是Mac,它在循环中运行了几次,但随后显示了一个“Pytho quit unexpective”错误。你知道吗


Tags: importtimedefchecksys数字productgenerator
2条回答

你的程序正在崩溃,因为你的递归循环没有停止。当x达到900的值时,generate函数总是调用其代码的else分支。您需要添加循环停止的条件。否则它会填满内存,使程序崩溃,因为递归循环对调用它们的次数有限制。你知道吗

根据上面的答案,您的递归从未停止,因为一旦x=900,它总是通过调用else代码进行递归。你知道吗

我建议以下解决方案: a) 如果您有兴趣将y保持在999直到x为900,然后减小y直到它为900,您应该在else中添加以下内容(即执行999x999、999x998。。。999x900。。。998x900。。。900 x 900毫米):

else:
    if y >= 900:
       generator(x,y,product)
       y=y-1

b)如果您想在这两种情况下都递归(即并行减少):

def generator(x,y,product):
    if x >= 900 and y >=900:
        product=x*y
        strp=str(product)
        check=strp[::-1]
        print (check)
        time.sleep(0.1)
        if strp==check:
            print ("done")
        x=x-1
        y=y-1
        generator(x, y, product)

我个人会推荐第二种解决方案,因为它更整洁。你知道吗

请注意,在两个循环上递归时,不需要while循环,if检查就足够了。你知道吗

相关问题 更多 >