J'ai écrit le programme suivant, en utilisant la récursivité, mais je n'arrive pas à comprendre comment l'écrire de façon non récursive. Chaque fois que je lance ma version non récursive, les chiffres sont loin. Des suggestions sur la façon d'écrire la méthode suivante sans récursion?Blob ... comment écrire de manière non récursive
int countCells(color grid[ROWS][COLS], int r, int c) {
if (r < 0 || r >= ROWS || c < 0 || c >= COLS) {
return 0;
} else if (grid[r][c] != ABNORMAL) {
return 0;
} else {
grid[r][c] = TEMPORARY;
return 1
+ countCells(grid,r-1,c-1) + countCells(grid,r-1,c)
+ countCells(grid,r-1,c+1) + countCells(grid,r,c+1)
+ countCells(grid,r+1,c+1) + countCells(grid,r+1,c)
+ countCells(grid,r+1,c-1) + countCells(grid,r,c-1);
}
}
C'est ce que j'ai essayé BTW:
int countCells(color grid[ROWS][COLS], int r, int c)
{
int temp = 0;
if (r < 0 || r >= ROWS || c < 0 || c >= COLS)
{
return 0;
}
else if (grid[r][c] != ABNORMAL)
{
return 0;
}
else
{
int original_row = r;
int original_column = c;
while(r >= 0 && row < ROWS && c >= 0 && c < COLS && grid[r][c] == ABNORMAL)
{
grid[r][c] = TEMPORARY;
temp = temp + 1;
r = r - 1;
c = c - 1;
}
r = original_r;
c = original_c;
while(r >= 0 && r < ROWS && c >= 0 && c < COLS && grid[r][c] == ABNORMAL)
{
grid[r][c] = TEMPORARY;
temp = temp + 1;
r = r - 1;
}
r = original_r;
c = original_c;
while(r >= 0 && r < ROWS && c >= 0 && c < COLS && grid[r][c] == ABNORMAL)
{
grid[r][c] = TEMPORARY;
temp = temp + 1;
r = r - 1;
c = c + 1;
}
r = original_r;
c = original_c;
while(r >= 0 && r < ROWS && c >= 0 && c < COLS && grid[r][c] == ABNORMAL)
{
grid[r][c] = TEMPORARY;
temp = temp + 1;
c = c + 1;
}
r = original_r;
c = original_c;
while(r >= 0 && r < ROWS && c >= 0 && c < COLS && grid[r][c] == ABNORMAL)
{
grid[r][c] = TEMPORARY;
temp = temp + 1;
r = r + 1;
c = c + 1;
}
r = original_r;
c = original_c;
while(r >= 0 && r < ROWS && c >= 0 && c < COLS && grid[r][c] == ABNORMAL)
{
grid[r][c] = TEMPORARY;
temp = temp + 1;
r = r + 1;
}
r = original_r;
c = original_c;
while(r >= 0 && r < ROWS && c >= 0 && c < COLS && grid[r][c] == ABNORMAL)
{
grid[r][c] = TEMPORARY;
temp = temp + 1;
r = r + 1;
c = c - 1;
}
r = original_r;
c = original_c;
while(r >= 0 && r < ROWS && c >= 0 && c < COLS && grid[r][c] == ABNORMAL)
{
grid[r][c] = TEMPORARY;
temp = temp + 1;
c = c - 1;
}
r = original_r;
c = original_c;
return temp;
}
}
Cela ne fait pas la même chose que le code original. Le code original recherche un blob connecté de points anormaux. –
en effet, ne produit pas de bons nombres; _; –