为什么我的python程序不会永远运行? “出乎意料地退出”

时间:2016-05-12 22:28:45

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

根据上面的答案,你的递归永远不会停止,因为一旦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循环,如果检查就足够了。