C++ 无法使用if()停止递归并返回

C++ 无法使用if()停止递归并返回,c++,C++,问题是用n个数输出所有二进制数,我被要求使用递归来解决它,我在调试代码时设法完成了任务要求,但我仍然无法停止递归,即使我设置了当所有数的值为1时循环停止的条件 int anchor_check(vector <int> v) { for(auto iter=v.begin();iter!=v.end();iter++) if(*iter==0) return 0; return 1; } int testing(int i,i

问题是用n个数输出所有二进制数,我被要求使用递归来解决它,我在调试代码时设法完成了任务要求,但我仍然无法停止递归,即使我设置了当所有数的值为1时循环停止的条件

int anchor_check(vector <int> v)
{
    for(auto iter=v.begin();iter!=v.end();iter++)
        if(*iter==0)
            return 0;
    return 1;
}

int testing(int i,int &n,vector <int> v){
    if(anchor_check(v))
        return 0;

    while (i>=0){
        if(v[i]==0){
            v[i]=1;
            for(int j=i+1;j<n;j++)
                v[j]=0;
            vector_output(v);//Print out the vector
            testing(n-1,n,v);
        }
        else testing(--i,n,v);
    }
}

int main()
{
    int n;
    cin>>n;
    int i=n-1;
    vector <int> v(n,0);
    testing(i,n,v);
}
函数测试调用自身。这就是所谓的递归。return语句不会使函数测试完全消失,只会使最内部的调用消失

另外,由于测试从循环中调用自身,它将多次调用自身


因此,一旦您的anchor_检查发现结果,当前最内部的测试调用将返回,而无需进一步递归。并非如此,在堆栈或堆空间用完之前,可能会进行数以百万计的其他调用,无论先发生什么,然后崩溃。

非常感谢。我仍然习惯于使用代码格式什么是向量输出?你能提供包括主要功能的完整代码吗?很抱歉,我已经编辑了代码