Usando la recursividad para calcular la sum de solo elementos positivos en la matriz

Una matriz se llena con elementos aleatorios (negativos y positivos). Ahora quiero calcular la sum de SOLO los elementos positivos.

Iterativo no hay problema, pero en la versión de recursión solo puedo obtener la sum de ambos negativos y positivos.

¿Cómo puedo “verificar” en la versión recursiva que solo resume los elementos positivos?

Versión iterativa:

public int IterSomPosElem(int[] tabel, int n) { n = 0; for (int i = 0; i = 0) { n += tabel[i]; } } return n; } 

Versión recursiva en este momento (resume todos los elementos en lugar de solo lo positivo):

 public int RecuSomPosElem(int[] tabel, int n) { if(n == 1) return tabel[0]; //stopCriterium else { return (tabel[n - 1] + RecuSomPosElem(tabel, n - 1)); // how to check, so it only sums up the postive elements and "ignores" the negative elements. } } 

¿Es esta tarea? ¿Por qué necesitas hacer esto con una función recursiva?

En el mundo real, sería un simple LINQ

 int positiveSum = tabel.Where(i => i > 0).Sum(); 

Qué tal si

 int foo[] = new [] {1, -9, 10, 8, -16, ...}; int sumOfPostiveInts = foo.Sum(x => x < 0 ? 0 : x); or...foo.Where(x => x > 0).Sum(); 

¿Algo como?

 public int RecuSomPosElem(int[] tabel, int n) { if(n == 1) return tabel[0]; //stopCriterium else { var valueToSum = tabel[n - 1] > 0 ? tabel[n - 1] : 0; return (valueToSum + RecuSomPosElem(tabel, n - 1)); } } 
 public int RecuSomPosElem(int[] tabel, int n) { if(n == 1) return tabel[0]; //stopCriterium else { if (tabel[n - 1] > 0) return (tabel[n - 1] + RecuSomPosElem(tabel, n - 1)); else return RecuSomPosElem(tabel, n - 1)); } } 

¡Estás tan cerca! Usando su algoritmo, pero solo agregando una verificación para ver si el valor actual en la tabla es negativo o no. Si es negativo, pase al siguiente elemento de la matriz:

  private static int RecuSomPosElem(int[] tabel, int n) { int i = n - 1; while (tabel[i] < 0 && i > 0) i--; if (i == 0) { return 0; //stopCriterium } else { return (tabel[i] + RecuSomPosElem(tabel, i)); } }