Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Funciones recursivas

Estas en el tema de Funciones recursivas en el foro de C/C++ en Foros del Web. Hola. En el manual que estoy siguiendo, he llegado al tema de funciones recursivas. Para entenderlas, estoy guiándome del único ejemplo que viene. Es este: ...
  #1 (permalink)  
Antiguo 15/02/2012, 15:20
 
Fecha de Ingreso: enero-2012
Mensajes: 68
Antigüedad: 12 años, 3 meses
Puntos: 0
Funciones recursivas

Hola.

En el manual que estoy siguiendo, he llegado al tema de funciones recursivas.

Para entenderlas, estoy guiándome del único ejemplo que viene.

Es este:

Código C:
Ver original
  1. #include <stdio.h>
  2. long fact(int n) {
  3. if (n==1) /* Aseguramos que termine */
  4. return 1;
  5. return n * fact (n-1); /* Si no es 1, sigue la recursión */
  6. }
  7. main() {
  8. int num;
  9. printf("Introduzca un número entero: ");
  10. scanf("%d", &num);
  11. printf("Su factorial es: %ld\n", fact(num));
  12. }

Del código, entiendo que si n es uno termina la función. Pero
return n * fact (n-1);
no lo entiendo muy bien.
¿Cómo voy a multiplicar n por la función llamada factorial, si la primera vez no ha obtenido ningún valor? El resultado daría 0, entonces...

¿Alguien podría explicármelo...?

La verdad, no entiendo muy bien las funciones recursivas...

Muchas gracias.

Saludos.
  #2 (permalink)  
Antiguo 15/02/2012, 19:14
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 4 meses
Puntos: 25
Respuesta: Funciones recursivas

podrias hacer el seguimiento de la funcion para ver como funciona:

supongamos que llamamos a la funcion con el valor 4:

- n= 4
- n es distinto de 1, por lo tanto no se ejecuta el codigo del if
- retornar 4 * factorial(3)

en este ultimo punto se puede observar la recursividad, es decir, una funcion que se llama a si misma. Para determinar el valor de retorno se ejecuta nuevamente la funcion pero con n=3.
la funcion queda en un modo "stand by", esperando a que se obtenga un valor que se pueda usar.

ahora se ejecuta la funcion factorial con n=3
- 3 es distinto de 1, por lo tanto no se ejecuta el codigo del if
- retornar 3 * factorial(2)


nuevamente se ejecuta la funcion con n=2
- 2 es distinto de 1, por lo tanto no se ejecuta del codigo del if
- retornar 2 * factorial(1)

nuevamente se ejecuta la funcion con n=1
- 1 es igual a 1, por lo tanto se retorna el valor 1

- ahora factorial(1) vale 1, entonces podemos resolver la linea donde puse "retornar 2*factorial(1)", que ahora es lo mismo que "retornar 2*1".

- ahora factorial(2) vale 2, entonces podemos resolver la linea donde puse "retornar 3*factorial(2)", que ahora es lo mismo que "retornar 3*2"

- ahora factorial(3) vale 6, entonces podemos resolver la linea donde puse "retornar 4*factorial(3)", que ahora es lo mismo que "retornar 4*3"

- el resultado del llamado a la funcion sera 12.



cabe aclarar que usar funciones recursivas consume mucha memoria, te recomiendo que las utilices solamente cuando sean la ultima opcion, si se puede hacer de otra manera mejor. Este ejemplo se puede hacer de varias maneras diferentes, pero es el mas facil de ver la recursividad.


saludos y espero que hayas entendido la explicacion
  #3 (permalink)  
Antiguo 16/02/2012, 15:33
 
Fecha de Ingreso: enero-2012
Mensajes: 68
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Funciones recursivas

Muchísimas gracias. Ya he entendido el problema y cómo se usa la recursividad.

Saludos.

Etiquetas: funcion, funciones, recursivas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:39.