我正在寻找解决问题的方法,我已经找到了c ++的方法,但是当我在python中尝试相同的逻辑时,它给出了RecursionError: maximum recursion depth exceeded in comparison
。
x=2
y=500
#Python Implementation
def F(x,y):
if(x==0):
return (y+1)%1000
if(x>0 and y==0):
return F(x - 1, 1)%1000
else:
return F(x - 1, F(x, y - 1))
print(str(F(x,y)))
#C++ Implementation
int f(int x,int y)
{
if(x==0)
return (y+1)%1000;
if(x>0&&y==0)
return f(x-1,1)%1000;
else
return f(x-1,f(x,y-1));
}
int main()
{
int x,y;
scanf("%d%d",&x,&y);
printf ("%03d", f(x,y));
return 0;
}
谢谢。
答案 0 :(得分:4)
import resource, sys
resource.setrlimit(resource.RLIMIT_STACK, (2**29,-1))
sys.setrecursionlimit(10**6)
可以。但是,如果可以的话,请尝试使用备忘录来减少递归调用。如果您确实需要通过递归来执行此操作,请使用上面的代码并将其附加到python代码中。它将增加python的递归限制,我认为是997。
来源:Setting stacksize in a python script
What is the maximum recursion depth in Python, and how to increase it?
答案 1 :(得分:0)
这类似于防止堆栈溢出。那是因为python没有特别针对尾部递归进行优化。
您可以更改该限制,但是不建议使用(使用sys.setrecursionlimit())。如果要更改,则解释器设置的默认值为1000。