Contando los elementos que se pueden dividir por 2 en el método de recursión

Eran bruto:

Tengo una tarea (Tarea) para contar el número de elementos de la matriz que se puede dividir por 2, lo que necesito para hacerlo de una manera recursividad con el fin de mejorar el rendimiento. El problema es que mi contador no guarda el valor y volver a sólo 1 en lugar del número de elementos que puede ser dividido por 2 en mi ejemplo debe devolver 7

Usted puede mirar en el código que probé recuerdo lo necesito para hacerlo de manera recursividad no de manera regular por bucle que mucho más fácil ...

public class Sample1{

    public static void main(String[] args) {

        int [] array = {2,4,6,8,14,12,14};
        System.out.println(what(array));
    }
    /**
     *
     * @param a an array of of numbers
     * @return the number of numbers that can divided by 2
     */
    public static int what (int []a){
        return countingPairNumberes (a, 0, a.length - 1,0);

    }
    /**
     *
     * @param a an array of of numbers
     * @param lo the begining of the array
     * @param hi the end of the array
     * @return the number of numbers that can divided by 2
     */
    private static int countingPairNumberes (int [] a, int lo, int hi , int sum)
    {
        int counter = sum;
        if (lo <= hi) {
            if(a[lo] % 2 == 0)
                counter++;
            countingPairNumberes (a, lo+1, hi ,counter);

        }

        return counter;

    }


}

Mis resultados esperados que serán contador 7 y esto lo voy a imprimir en la pantalla, pero estoy consiguiendo el valor 1 en su lugar.

Eran :

No es necesario pasar sumcomo un parámetro para el método recursivo. Y que no debe ignorar el resultado de la llamada recursiva.

El recuento de los números pares en una matriz dada es el recuento de los números pares de la sub-matriz que se obtiene después de retirar el primer elemento, con la adición opcional de 1, si el elemento eliminado es par.

/**
 *
 * @param a an array of of numbers
 * @return the number of numbers that can divided by 2
 */
public static int what (int []a){
    return countingPairNumberes (a, 0, a.length - 1);
}

/**
 *
 * @param a an array of of numbers
 * @param lo the begining of the array
 * @param hi the end of the array
 * @return the number of numbers that can divided by 2
 */
private static int countingPairNumberes (int [] a, int lo, int hi)
{
    if (lo <= hi) {
        int counter = countingPairNumberes (a, lo+1, hi);
        if(a[lo] % 2 == 0)
            counter++;
        return counter;

    } else {
        return 0;
    }

}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=210566&siteId=1
Recomendado
Clasificación