我在使用数组作为递归函数中的输入存在问题这里是问题:我在第一级递归中将数组值设置为我想要的,但是在级别中对数组进行了更改递归的2-3以某种方式改变了递归级别1的数组。这不应该发生吗?因为每次调用该方法时,它应该存储特定的数组,以便它被称为对吗?
这里是该方法名为vertexCover的递归方法的代码:
int vertexCover (int start, int covering, int seen [1000]){
if(covering==0){
if(start>numberOfEdges-1){
return 1;
}
else{
while(start<=numberOfEdges-1){
if(seen[edge1[start]]==0 && seen[edge2[start]]==0){
return 0;
}
start++;
}
return 1;
}
}
else{
while(seen[edge1[start]]!=0 || seen[edge2[start]] !=0){
start++;
if(start>numberOfEdges-1){
return 1;
}
}
seen[edge1[start]]=1;
int a= vertexCover(start + 1, covering-1, seen);
seen[edge1[start]]=0;
seen[edge2[start]]=1;
int b = vertexCover(start+1,covering-1,seen);
if(a==1 || b==1){
return 1;
}
else {
return 0;
}
}
}
我想要做的是确保每次对递归方法的调用都有自己唯一的数组,对数组所做的更改不会影响从前一次调用中存储的数组。出于某种原因,它没有这样做。
答案 0 :(得分:0)
如果你真的想要这样做,你需要像这样复制你的数组。
int vertexCover (int start, int covering, const int array [1000]){
int seen[1000];
memcpy(seen, array, sizeof(seen));
...
}
但是你的程序会非常慢,所以我认为你应该使用短阵列或找到另一种方法来做你想要的。
答案 1 :(得分:0)
你的职能:
int vertexCover(int start, int covering, int seen [1000]) { ... }
与以下内容相同:
int vertexCover(int start, int covering, int *seen) { ... }
因此对seen[0]
所做的更改将对该指针的所有用户可见。如果你想要一个数组的本地副本,你需要明确地复制它。