Ver Mensaje Individual
  #2 (permalink)  
Antiguo 23/08/2007, 17:59
Avatar de Instru
Instru
 
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años
Puntos: 52
Re: Rcursividad en ANSI C

Pues es sencillo, ahora te doy una explicacion resumida.

Pero primero, te digo que lo que dices:

Cita:
muchos algoritmos iterativos se pueden simplificar en forma recursiva
Desde mi punto personal de vista yo creo que es al revés. Muchos algoritmos en forma recursiva se simplifican en forma iterativas. Ya que como tu lo has notado, es mucho mas dificil leer y entender una recursividad que una estructura de iteracion(for, while, do...)

La recursividad, como ya has de saber, es cuando una funcion se llama a si misma.
Lo que te rompe la cabeza es pensar. "Si se llama a si, cuando carajos termina!!!"
Pues eh ahi la respuesta.

Para que una funcion sea recursiva, tienene forzosamente que tener una condifion(if) donde le digas hasta que profundidad debe llegar.

El caso que abordan tooodoos(o casi todos) los libros, maestros, etc, es el del factorial.

El factorial es por ejemplo:
9!= 9*8*7*6*5*4*3*2*1
Obviamente esto lo puedes hacer con un ciclo for, while o el que se te ocurra.
Pero se aplica muy bien para demostrar la recursividad.

Primero tienes una funcion:

int funcion(int factorial)
{
}

Obviamente debe regresar un valor, para poder trabajar con este valor dentro de ella misma.

int(funcion(int numero)
{
if(numero==0)
return 1;
else
return numero*funcion(numero-1);
}

Como veras, el factorial lo terminas de calcular al llegar al 1.
Entonces, debes decirle.
Si numero es cero, YA NO VUELVES A LLAMAR ALA FUNCION solo regresas 1.
Entonces, empeizas a salir del remolino de llamadas a la funcion.
Y en cada salida, te va regresando parte del resultado que se multiplica por el numero mas grande y asi sucesivamente.

Si no me entendiste, hay otro post por ahi, donde lo explican mucho mas claro.

Saludos