我正在做一个数学问题,需要我将数字乘以并检查它们是否是回文。
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意外退出”错误。
答案 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循环,如果检查就足够了。