ayuda con recursividad

yorio
26 de Enero del 2009
Teniendo este codigo, como lo transformarias en un metodo recursivo?
do{
if(pedirMayor==true){
System.out.println("Escribe "+num+" para terminar o un numero mayor que "
+num);
}
else{
System.out.println("Escribe "+num+" para terminar o un numero menor que "
+num);
}
num2=ES.leeNº("Introduce el numero: ");
if(num2>num && pedirMayor || num2
num=num2;
System.out.println("Muy bien");
}
else{
if(num2
System.out.println("Cuidado! " + num2 + " es menor que " + num + "("+num2+"<"+num+")");
System.out.println("A partir de ahora te pediré números menores cada vez.");
pedirMayor = !pedirMayor;
}
if(num2>num && !pedirMayor){
System.out.println("Cuidado! " + num2 + " es mayor que " + num + "("+num2+"<"+num+")");
System.out.println("A partir de ahora te pediré números mayores cada vez.");
pedirMayor = !pedirMayor;
}
}
}while(num2!=num);

Gracias :)

MIRL
26 de Enero del 2009
Generalmente, la forma de pasar un algoritmo iterativo a recursivo es:

1.- Convertirlo a una estructura MIENTRAS (while)
2.- La condición de salida del algoritmo recursivo sería la opuesta a la del MIENTRAS.
3.- En el SI NO (else) ejecutarías las instrucciones necesarias para simular un ciclo del bucle, acabando con un DEVUELVE funcion(parámetros) (+operaciones si fueran necesarias)

Te voy a poner el ejemplo del factorial. El factorial de forma iterativa se calcularía así:

public static int factorialIt(int n) {
int fact=1;
while(n>=1) {
fact *= n;
n--;
}
return fact;
}

1.- Ya lo tenemos hecho.
2.- if (n<=1) sería la condición de salida (la opuesta a la del while)
3.- Escribimos qué hace cuando acaba y cuando no:

public static int factorialRec(int n) {
if (n<=1)
return n;
return n*factorialRec(n-1);
}


Espero que te sirva. Si te lías empieza con algoritmos sencillos como el ejemplo que te he puesto y luego avanza hacia algoritmos más complejos.

Si tienes alguna duda más concreta, por favor, hazla, obviamente no te voy a hacer el ejercicio :P