Как создать рекурсивный метод суммы квадратов из n чисел? - PullRequest
0 голосов
/ 06 марта 2019

Мой код должен получить n чисел и вернуть сумму их квадратов рекурсивным методом.

Пример: сумма 1,1,2,2,3 квадратов должна быть 19 (1 + 1 +4 + 4 + 9)

Мой код печатает 14 по какой-то причине.

import java.util.Scanner;

/**
 *
 * @author User
 */
public class SomaQuadrados {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) 
    {
      Scanner teclado = new Scanner(System.in);
      int n = teclado.nextInt();
      int numero = 0;
      for(int i = 0; i < n; i++)
      {
           numero = teclado.nextInt();
      }

      System.out.println(somaQuadrados(numero));

    }

    public static int somaQuadrados(int numero)
    {
        if(numero == 0)
        {
            return 0;
        }
        else
        {
            return somaQuadrados(numero-1) + (numero*numero);
        }
    }

}

1 Ответ

0 голосов
/ 06 марта 2019

Проблема в том, что ваша рекурсивная функция somaQuadrados() должна обрабатывать список [1, 1, 2, 2, 3] чисел. То есть:

<first number> * <first number> + somaQuadrados(<rest of numbers>)

с базовым регистром пустого списка. Но вместо этого вы берете индивидуальный номер и вычисляете:

<number> * <number> + somaQuadrados(<number - 1>)

Это совершенно другая программа. Когда вы обрабатываете последний элемент 3, вы получаете 14, который равен 1 * 1 + 2 * 2 + 3 * 3.

Я бы ожидал, что решение этой проблемы будет выглядеть примерно так:

import java.util.*;

public class SomaQuadrados {

    public static void main(String[] args) 
    {
        List<Integer> numeros = new ArrayList<>();
        Scanner teclado = new Scanner(System.in);

        while (teclado.hasNextInt()) {
            int numero = teclado.nextInt();
            numeros.add(numero);
        }

        System.out.println(somaQuadrados(numeros));
    }

    public static int somaQuadrados(List<Integer> numeros)
    {
        int size = numeros.size();

        if (size == 0)
        {
            return 0;
        }

        int numero = numeros.get(0);

        return numero * numero + somaQuadrados(numeros.subList(1, size));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...