c语言 - 递归函数不返回取消条件的值



我有一个模拟Bashni-Game(一种跳棋游戏)的递归函数。我的函数得到域和颜色。它检查游戏是否结束,这是递归的取消条件。对于-1,它意味着游戏还没有结束,所以它递归地调用自己,改变颜色和新的游戏板。如果游戏结束,则返回0或1。

int simulate(int myColour, char field[WIDTH][HEIGTH][MAX_TOWER_LENGTH]){
int cancel = checkForEndOfGame(field); 
//int returnValue=50;
struct moveArray moves;
memset(&moves, 0, sizeof(moves)); 
printf("DEBUG: CANCEL-Value: %in", cancel);
if(cancel==-1){
moves=calculatePossibleMoves(moves, field, myColour);
int indexMove = rand() % moves.count;
makeMove(field, moves.moves[indexMove]);
printGameboard(field);
int colourChange;
if(myColour==WHITE){
colourChange=BLACK;
} else colourChange=WHITE;
simulate(colourChange, field);
}
if(cancel==0){
printGameboard(field);
return 1;
}
if(cancel==1){
printGameboard(field);
return 0;
}
return 13;
}

即使cancel的值是1(这意味着我应该得到返回0),我的函数返回13。我把返回13只是因为否则我的编译器(gcc)会给我错误:

error: non-void function does not return a value in all control paths
[-Werror,-Wreturn-type]

您的递归调用不会尝试将取消原因传递给调用者。你似乎期望这一切会自动发生,但它不会。simulate的每个递归调用都有自己的局部变量——关键是cancel——所以在递归调用返回后,cancel的局部值将保持不变(仍然是-1),因此将返回13。

您可能想要做的只是传递返回值,使递归调用成为尾调用:

return simulate(colourChange, field);

最新更新