担心我可能会超出我的另一个问题(尽管这是一个新问题)我仍然问这个问题。为什么递归函数在峰值后向下计数?
我有这样的代码:
int blob_count(int y, int x, int gridCopy[][5], int sum){
//Local vars
int posX, posY;
//Find the position 1 behind and 1 above the starting point, and start the loop there
for(posX = -1;posX <=1; posX++){
for(posY = -1; posY <= 1; posY++){
if((y + posY) >= 0 && (x + posX) >= 0){
if((y + posY) <= 5 && (x + posX) <= 5){
if(gridCopy[posY+y][posX+x] == 1){
//Set the starting point to 0 (so it wont get calculated again)
gridCopy[posY+y][posX+x] = 0;
y = posY+y;
x = posX+x;
sum++;
blob_count(y, x, gridCopy, sum);
}
}
}
}
}
return sum;
}
的问题是,总之,这计数1,对于每一个递归运行,返回错误值。通过这样做打印每个递归来看,它给出结果:
sum = 1
sum = 2
sum = ...
sum = n
,这是伟大的,但通过设置为外循环打印出的总和(右前收益之和;)时,它已经达到顶峰发生相反的情况,所以它这样做:
sum = n
sum = ...
sum = 2
sum = 1
return sum; // = 1
这显然是错误的,因为我想总数,而不是最低。我的返回值是否错误?我试过把它放在递归调用之后(在循环内部),无济于事。
'blob_count'每次调用时都会对新的'sum'进行操作。您可能想要传递一个指针而不是其值。 – pmg