Hola a todos, hoy os dejo una serie de ejercicios propuestos y resueltos Java de divide y venceras.
Todos los ejercicios que proponemos están resueltos en este mismo post, intenta hacerlo por ti mismo y si te quedas atascado puedes mirar la solución. Recuerda, que no tiene por que estar igual tu solución con la del post, el objetivo es que aprendas no que me copies la solución.
Te recomiendo que uses mensajes de trazas, donde te sean necesarios. Si tienes problemas también puedes usar el depurador.
Aquí tienes todos los posts relacionados con Java:
Curso Java
1) Sumar los elementos de un array con divide y vencerás.
Spoiler Inside |
SelectShow> |
public class Ejercicio_recursividad_DDR_1 {
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5, 6, 7, 8};
System.out.println(sumaArrayDyV(0, array.length-1, array));
}
public static int sumaArrayDyV(int inicio, int fin, int[] array){
if(inicio == fin){
return array[inicio];
}else{
int mitad = (inicio+fin)/2;
int x = sumaArrayDyV(inicio, mitad, array);
int y = sumaArrayDyV(mitad+1, fin, array);
return x + y;
}
}
}
|
2) Multiplicar un array de números usando divide y vencerás.
Spoiler Inside |
SelectShow> |
public class Ejercicio_recursividad_DDR_2 {
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5, 6, 7, 8};
System.out.println(multiplicarArrayDyV(0, array.length - 1, array));
}
public static int multiplicarArrayDyV(int inicio, int fin, int[] array) {
if (inicio == fin) {
return array[inicio];
} else {
int mitad = (inicio + fin) / 2;
int x = multiplicarArrayDyV(inicio, mitad, array);
int y = multiplicarArrayDyV(mitad + 1, fin, array);
return x * y;
}
}
}
|
3) Dado un array saca la media usando divide y vencerás..
Spoiler Inside |
SelectShow> |
public class Ejercicio_recursividad_ddr_3 {
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5, 6, 7, 8};
if (array.length % 2 == 0) {
System.out.println(mediaArrayDyV(0, array.length - 1, array));
} else {
System.out.println("El numero de elementos debe ser par");
}
}
public static float mediaArrayDyV(int inicio, int fin, int[] array) {
if (inicio == fin) {
return array[inicio];
} else {
int mitad = (inicio + fin) / 2;
float x = mediaArrayDyV(inicio, mitad, array);
float y = mediaArrayDyV(mitad + 1, fin, array);
return (x + y) / 2;
}
}
}
|
4) Dado dos arrays, indica si son iguales usando divide y venceras.
Spoiler Inside |
SelectShow> |
public class Ejercicio_recursividad_ddr_4 {
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5, 6, 7, 8};
if (array.length % 2 == 0) {
System.out.println(mediaArrayDyV(0, array.length - 1, array));
} else {
System.out.println("El numero de elementos debe ser par");
}
}
public static float mediaArrayDyV(int inicio, int fin, int[] array) {
if (inicio == fin) {
return array[inicio];
} else {
int mitad = (inicio + fin) / 2;
float x = mediaArrayDyV(inicio, mitad, array);
float y = mediaArrayDyV(mitad + 1, fin, array);
return (x + y) / 2;
}
}
}
|
5) Dado un array, sacar el mínimo y máximo con divide y vencerás.
Spoiler Inside |
SelectShow> |
public class Ejercicio_recursividad_DDR_5 {
public static void main(String[] args) {
int[] arr1 = {1, 2, 3, 4, 5, 6, 7, 8};
int[] arr2 = {1, 2, 3, 5, 5, 6, 7, 8};
if (arr1.length == arr2.length) {
if (arraysIguales(0, arr1.length - 1, arr1, arr2) == -1) {
System.out.println("Los arrays son iguales");
} else {
System.out.println("Los arrays no son iguales");
}
} else {
System.out.println("Los arrays no son iguales");
}
}
public static int arraysIguales(int inicio, int fin, int[] arr1, int[] arr2) {
if (inicio == fin) {
if (arr1[inicio] == arr2[inicio]) {
return -1;
} else {
return inicio;
}
} else {
int mitad = (inicio + fin) / 2;
int x = arraysIguales(inicio, mitad, arr1, arr2);
int y = arraysIguales(mitad + 1, fin, arr1, arr2);
if (x != -1) {
return x;
}
if (y != -1) {
return y;
}
return -1;
}
}
}
|
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.
Deja una respuesta