Python实现无法在C ++中使用相同的逻辑

时间:2018-11-18 06:05:54

标签: c++ python-3.x recursion

我正在寻找解决问题的方法,我已经找到了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;
}

谢谢。

2 个答案:

答案 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。