[英]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.