C++ 无法使用if()停止递归并返回
问题是用n个数输出所有二进制数,我被要求使用递归来解决它,我在调试代码时设法完成了任务要求,但我仍然无法停止递归,即使我设置了当所有数的值为1时循环停止的条件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
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_检查发现结果,当前最内部的测试调用将返回,而无需进一步递归。并非如此,在堆栈或堆空间用完之前,可能会进行数以百万计的其他调用,无论先发生什么,然后崩溃。非常感谢。我仍然习惯于使用代码格式什么是向量输出?你能提供包括主要功能的完整代码吗?很抱歉,我已经编辑了代码