C中的递归代码

时间:2014-01-18 18:41:58

标签: c recursion

我正在尝试编写一个代码,用于仅使用递归检查数组geusses 中存在多少个数组battelships 我无法理解为什么函数checkCellsHit(int bships[],int lengthBS,int guesses[],int lengthG)不起作用。

函数checkHit(int battleships[], int length, int guess)正常运行并检查guess中是否存在battelships个数字。

请注意,每个用户输入都以negativ编号结尾。 为了即时:

Player 1 battleship locations:
0 5 10 2 3 4 7 -3
Player2 guesses:
11 12 13 -4
Battleship cells hit: 0

-

  #include <stdio.h>
  #define MAX 200`

  int checkHit(int battleships[], int length, int guess){
    int value=0;
    if (battleships[0]<0) {
        return 0;
    }
    if (battleships[0]==guess) {
        return 1;
    }
    else {
        value=checkHit((battleships+1), (length-1), guess);
        return value;
    }
  }

  int checkCellsHit(int bships[],int lengthBS,int guesses[],int lengthG){
    int count=0;
    if (bships[0]<0) {
        return 0;
    }
    if (checkHit(bships, lengthBS, guesses[0])) {
        count++;
    }
    count=count+checkCellsHit(bships, lengthBS-1, guesses+1, lengthG-1);
    return count;
  }

  int main(){
    int battelships[MAX]={0}, guess[MAX]={0};
    int i=0,j=0, value;
    printf("Player1 battleship locations:\n");
    scanf("%d", &battelships[i]);
    for (i=1; battelships[i-1]>=0; i++) {
        scanf("%d", &battelships[i]);
    }
    printf("Player2 guesses::\n");
    scanf("%d", &guess[j]);
    for (j=1; battelships[j-1]>=0; j++) {
        scanf("%d", &guess[j]);
    }

    value=checkCellsHit(battelships, i, guess, j);

    printf("%d", value);

    return 0;
  }

1 个答案:

答案 0 :(得分:1)

我认为你的问题在于

count=count+checkCellsHit(bships, lengthBS-1, guesses+1, lengthG-1);
checkCellsHit {p>你越过巴特尔船只和猜测。你递归的下一步,你需要减少猜测而不是战列舰。

所以更改为以下代码应该修复它

count=count+checkCellsHit(bships, lengthBS, guesses+1, lengthG-1);