一个简单的递归程序不知道哪里栈溢出了?

问题相关代码,请勿粘贴截图

#include 
using namespace std;
int cnt = 0, n;
void DFS(int index, int p) {
    if (index == 2 * n && p == 0) {
        cnt++;
        return;
    }
    if (p < 0) return;
    DFS(index + 1, p + 1);
    DFS(index + 1, p - 1);
}
int main()
{
    scanf("%d", &n);
    DFS(0, 0);
    printf("%d\n", cnt);
    return 0;
}
运行结果及报错内容

img

估计递归到堆栈用爆了吧。你这 if (index == 2 * n && p == 0)啥时候能满足啊,DFS(index + 1, p + 1);会一直由DFS(0,0)、DFS(1,1)、DFS(2,2)往下递归啊

img


先说下if (index == 2 * n && p == 0) ,你n输入的是3,那index在等于0你调用时给的0的时候,就不符合if语句,所以还会继续执行,此时你下面递归自己,index会一直加1,所以index== 2* n是有可能符合的,但是你在递归自己的时候p+1,此时p就不可能满足p=0这个条件了,所以第一个递归是会形成死循环的。
再说说第二个,第二个index+1效果还是一样的,p因为初始值是0,所以在-1以后会一直往下减,p的值永远也不可能等于0,所以也会一直死循环,但是你代码里做了控制,p<0就return了,所以第二个递归会终止。