簡體   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