-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMates.java
141 lines (110 loc) · 4.04 KB
/
Mates.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
package dominio;
import java.util.ArrayList;
public class Mates {
// Suma 0 + 1 + 2 + ... + n.
public static int sumaHastaN(int nb) {
if (nb == 0) {
return 0;
}
return nb + sumaHastaN(nb - 1);
}
// Factorial de un numero
public static int factorial(int nb) {
if (nb == 1) {
return 1;
}
return nb * (factorial(nb - 1));
}
// Potencia n-esima
public static int potencia(int nb, int exponente) {
if (exponente == 0) {
return 1;
}
return nb * potencia(nb, exponente - 1);
}
// Suma elementos de una lista de numeros
public static int sumaElementosLista(int[] listaNumeros, int index) {
if (index == listaNumeros.length) {
return 0;
}
return listaNumeros[index] + sumaElementosLista(listaNumeros, index + 1);
}
// Media aritmetica de una lista de numeros
public static double mediaElementosLista(int[] listaNumeros, int index, int tallaInicial) {
if (index == listaNumeros.length) {
return 0;
}
// sumo recursivamente
double suma = listaNumeros[index] + mediaElementosLista(listaNumeros, index + 1, tallaInicial);
if (index == 0) {
// calculo de media
suma = suma / tallaInicial;
}
return suma;
}
// Desviación tipica de una lista de numeros
public static double desviacionElementosLista(int[] listaNumeros, double media,
int tallaInicial, int index, double sumaDiferencias)
{
if (index == listaNumeros.length) {
double varianza = sumaDiferencias / tallaInicial;
return Math.sqrt(varianza); // retorno desviacion
}
double diferenciaCuadrado = Math.pow(listaNumeros[index] - media, 2);
sumaDiferencias += diferenciaCuadrado;
return desviacionElementosLista(listaNumeros, media, tallaInicial, index + 1, sumaDiferencias);
}
// Suma de numeros pares hasta N
public static int sumaParesHastaN(int nb) {
if (nb == 0) {
return 0;
}
if (nb % 2 == 0) {
return nb + sumaParesHastaN(nb - 1);
}
return sumaParesHastaN(nb - 1);
}
// Suma de elementos pares en una lista
public static int sumaParesElementosLista(int[] listaNumeros, int tallaInicial, int i) {
if (i == tallaInicial) {
return 0;
}
if (listaNumeros[i] % 2 == 0){
return listaNumeros[i] + sumaParesElementosLista(listaNumeros, tallaInicial, i+1);
} else {
return sumaParesElementosLista(listaNumeros, tallaInicial, i+1);
}
}
// Lista de numeros pares de una lista dada
public static ArrayList<Integer> obtenerListaPar (int[] listaNumeros, ArrayList<Integer> nuevalista, int i) {
if (i == listaNumeros.length) {
return nuevalista;
}
if (listaNumeros[i] >= 2 && listaNumeros[i] % 2 == 0) {
nuevalista.add(listaNumeros[i]);
}
return obtenerListaPar(listaNumeros, nuevalista, i + 1);
}
// Lista de numeros pares hasta N (en orden descendiente)
public static ArrayList<Integer> obtenerListaParHastaN (ArrayList<Integer> nuevaLista, int nb) {
if (nb == 0) {
return nuevaLista;
}
if (nb >= 2 && nb % 2 == 0) {
nuevaLista.add(nb);
}
return obtenerListaParHastaN(nuevaLista, nb - 1);
}
// Producto escalar de dos listas no vacias y del mismo tamaño
public static int productoEscalarListas(int[] listaNumeros1, int[] listaNumeros2, int i, int resultado) {
if (listaNumeros1.length != listaNumeros2.length) {
System.out.println("Las listas deben ser del mismo tamaño");
System.exit(1);
}
if (i == listaNumeros1.length) {
return resultado;
}
resultado += listaNumeros1[i] * listaNumeros2[i];
return productoEscalarListas(listaNumeros1, listaNumeros2, i + 1, resultado);
}
}