繁体   English   中英

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

[英]Why doesn't my python program run forever? “Unexpectedly quit”

我正在做一个数学问题,要求我将数字相乘并检查它们是否是回文。

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意外退出”错误。

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

按照上面的答案,递归永远不会停止,因为一旦x = 900,它总是通过调用else代码来递归。

我建议以下解决方案:a)如果您有兴趣将y保持在999直到x为900,然后将y减小到900,则应在其他项中添加以下内容(即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检查就足够了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM