Проблема в том, что ваша рекурсивная функция 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));
}
}