我正在尝试编写一个代码来检查数组geusses
中有多少个存在于数组 battelships
中仅使用递归
我不明白为什么这个功能 checkCellsHit(int bships[],int lengthBS,int guesses[],int lengthG)
不起作用。
函数checkHit(int battleships[], int length, int guess)
工作正常并检查号码是否 guess
存在于battelships
.
请注意,每个用户输入都以负数结尾。 即时:
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;
}
最佳答案
我认为你的问题在于
count=count+checkCellsHit(bships, lengthBS-1, guesses+1, lengthG-1);
在checkCellsHit
中,您将检查战斗舰艇和猜测。递归的下一步,您需要减少猜测,而不是战舰。
因此更改以下代码应该可以修复它
count=count+checkCellsHit(bships, lengthBS, guesses+1, lengthG-1);
关于c - C 中的递归代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21208296/