擔心我可能會超出我的另一個問題(儘管這是一個新問題)我仍然問這個問題。爲什麼遞歸函數在峯值後向下計數?
我有這樣的代碼:
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