Ayuda con recursion

Juan
13 de Septiembre del 2005
Hola necesito un poco de ayuda con recursion , necesito hacer un ejercicio , pero le he dado vueltas y vueltas y no le encuentro solucion a ver si alguien me pudiera dar una sugerencia mi codigo es el siguiente

public class Mundial {
private static EquipoFutbol equipos[] = new EquipoFutbol[16];

public static void main(String[] args) {
initEquipos();
int ganador = partido(equipos.length / 2, 4);
// Equipos.length /2 = 8, es el pivote inicial, dividiendo
// a la mitad los dos posibles grupos de equipos,
//definiendo la final (Nivel 4)

System.out.println("---- El GANADOR Del Mundial TEC es: "
+ equipos[ganador].getNombreEquipo());
}

public static void initEquipos() {
equipos[0] = new EquipoFutbol("Mexico", 3, 1, 5);
equipos[1] = new EquipoFutbol("Argentina", 5, 3, 2);
equipos[2] = new EquipoFutbol("Brazil", 6, 3, 1);
equipos[3] = new EquipoFutbol("Estados Unidos", 3, 3, 3);
equipos[4] = new EquipoFutbol("España", 3, 3, 3);
equipos[5] = new EquipoFutbol("Alemania", 3, 3, 3);
equipos[6] = new EquipoFutbol("Nigeria", 3, 2, 4);
equipos[7] = new EquipoFutbol("Arabia Saudita", 3, 1, 7);
equipos[8] = new EquipoFutbol("Japón", 3, 2, 2);
equipos[9] = new EquipoFutbol("Holanda", 3, 3, 4);
equipos[10] = new EquipoFutbol("Paraguay", 4, 2, 2);
equipos[11] = new EquipoFutbol("portugal", 3, 2, 2);
equipos[12] = new EquipoFutbol("Italia", 4, 2, 5);
equipos[13] = new EquipoFutbol("Francia", 4, 3, 3);
equipos[14] = new EquipoFutbol("Inglaterra", 5, 3, 2);
equipos[15] = new EquipoFutbol("China", 3, 2, 7);
}

public static int partido(int pivote, int nivel) {
int eq1, eq2;
int a1, a2, d1, d2, e1, e2;

// ----------- ESCRIBE AQUÍ TU CODIGO
// Debes definir quien participará
// dando valor a las variables eq1 y eq2.
// tomadas del ganador de la función recursiva.
// --------------------------------------------------

// Logica de juego para definir al ganador de un
// Enfrentamiento
System.out.println("Partido Entre " + equipos[eq1].getNombreEquipo()
+ " y " + equipos[eq2].getNombreEquipo());
a1 = equipos[eq1].getAtaque();
a2 = equipos[eq2].getAtaque();
d1 = equipos[eq1].getDefensa();
d2 = equipos[eq2].getDefensa();
e1 = equipos[eq1].getEstamina();
e2 = equipos[eq2].getEstamina();
int golesEq1 = (a1 - d2) * e1;
int golesEq2 = (a2 - d1) * e2;
if (golesEq1 == golesEq2) { // Caso de empate se decide a penales
// (Aleatorio)
if ((Math.random() * 10 < 5)) {
System.out.println("Empate: " + golesEq1 + " a " + golesEq2
+ ". Gana " + equipos[eq1].getNombreEquipo()
+ " por penales");
return eq1;
} else {
System.out.println("Empate: " + golesEq1 + " a " + golesEq2
+ ". Gana " + equipos[eq2].getNombreEquipo()
+ " por penales");
return eq2;
}
} else if (golesEq1 > golesEq2) { //Equipo con mejor diferencia de
// goles, gana
System.out.println("Gana " + equipos[eq1].getNombreEquipo() + " "
+ golesEq1 + " a " + golesEq2);
return eq1;
} else {
System.out.println("Gana " + equipos[eq2].getNombreEquipo() + " "
+ golesEq2 + " a " + golesEq1);
return eq2;
}

}

}

Sasi
13 de Septiembre del 2005
No se si es lo que quieres, pero te he escrito un algoritmo muy fácil de entender, luego lo tendrás que implementar tú.
La idea es bien sencilla, dibujate un arbol con los con los equipos puestos debajo. los que jugarán la final serán el ganadores de la parte izquierda, y el ganador de la parte derecha.
equipo ganador(equipos){
if(equipos.length==1){//si hay solo un equipo, el ganador es él.
return (equipo);
}
else{
return (partido(ganador(equipos_izquierda),ganador(equipos_derecha))
}
}


Variante, si no quieres esperar hasta la última recursión, puedes poner como caso trivial cuando hay dos equipos,
el ganador es el que gana el partido.

equipo ganador(equipos){
if(equipos.length==2){//si hay dos equipos, el ganador es el que gane el partido.
return (partido(equipo-izquierda,equipo_derecha);
}
else{
return (partido(ganador(equipos_izquierda),ganador(equipos_derecha))
}
}

Sasi
13 de Septiembre del 2005
No se si estás, pero te ha servido?