CODIGO:
#includeint factorial (int n) { int factor; if (n <= 1) factor = 1; else factor = n * factorial(n-1); return factor; } int main (void) { int x; printf("Calcular el factorial para -> "); scanf("%d", &x); printf("%d! = %d", x, factorial(x)); return 0; }
¿Cómo funciona el código?
Centremonos en el bloque
int factorial (int n) { int factor; if (n <= 1) factor = 1; else factor = n * factorial(n-1); return factor; }
Supongamos que calcularemos el factorial para 5, (5!), entonces tenemos que
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6bHdCJOTh1jwX6K8adNdBZJLPxh8vRVMwenskpnhVRihbqEmj08wudkKDVvPHzVk2wSffEVw5Gn7Soj_ZVX87G-L7ZDNAqhjm-xfzWvxqF7Z1oUnxrVePzIjOY9U2hLyQiAaphZeV021o/s400/1.png)
Primera llamada recursiva, ahora tenemos n = 4
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9GdGR64vy7aor8mpOCp8L-x8F6CnpCmRD8pANeHs_C9lbAwmkn-qkKyXcGZg3uT5zG4BNeDodR3rKdtYPh52Zc4Y7_RM6y-EmKdJsosKju7NLhWe_q8eKlCM-6xEN9VtsxnVKIMdtCDJt/s400/2.png)
Segunda llamada recursiva, ahora tenemos n = 3
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXbnsUlC-5UFpm1ouvAWe7OQlLWMWfu7owHMpQl9U-ikRpekoMvnXVqe0ABaNT4e6WthrZzlQaLovYxk0eSwQHdyQKqY79V7bTPLNJlSO6hgjp4NgUiidY95qakBECVcIAklXl3X71-t4o/s400/3.png)
Tercera llamada recursiva, ahora tenemos n = 2
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgy3e_VdZemTo72ZSJgUJfesVPKHZonmgeFL1X6C7QJUCHYn0-cGjmUsZG0i9y2UX6QwvE0IfFVOiUnkEwRnudRQ_fyBIgTVGavZ5VTgD3N8G7eIxIRqh6mku6XXBMgkruXk7jZRzPUM45m/s400/4.png)
Cuarta y última llamada recursiva, ahora tenemos n = 1
Al llegar a esta parte sucede algo diferente :
int factorial (1) { int factor; 1 <= 1 (SE CUMPLE, ENTONCES) return 1;
A partir de aquí vamos para atrás, factorial (1) regresa el valor de 1
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkaCgmMlgqC4a4OaUfNl_WBWRKs8P27nvi_hn2xBGjhDiTC5yrWDu5_vEGJFI8eMVZquij5SE-t-VEazmVk2A7pgil9HfIbwIxLpvtrvbvK54SFImzKSfMfpJGqAEZlSeQGagrmnU6P6Y1/s400/5.png)
termina la función factorial (2)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9sQFhMMxNvqV-EiOIo-pODXtO1n5lZH-UxYfu1JV_2sTw7YpAtUgzBCymfp6n3uzegi2dKc9mlKIUqBE9d7CeCCSXLOC7GtrTwpU10HlBQx08R-fM4n14LFDvUYUtRc0sjz6WfXybWTsX/s400/6.png)
termina la función factorial (3)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSOfegtC0mVaQiuPahwEtl57ivxhJvLk4C6T0fLnOO1jByecMaC1VIv-r5uMLmr-9px4i7l9EpA9Cks-OZzCtSS2LvWfHYm0tnW-CwEh-ET_OwSBm62_aa8WugXN_V55v2Ge9S5hcURZTL/s400/7.png)
termina la función factorial (4)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvGrvY7U7d9h0TzaNPTL2sgWmzaKszEjGyN5r8lISY_XUs_-Rsivp_GgzdHGGwOBnvd-s08ksn4BAckXzAhZDQY7MykJFTZLaJMw8Clh3NjwWyKlFMWeGDdievLjMBRfJBlap3ZOiCVu1S/s400/8.png)
Para asi dar conclusión a la función factorial (5), que regresa el valor de 120 , este valor se envía a la función main que imprime en pantalla el valor final 5! = 120
DESCARGA: factorial.c
SALUDOS!!!
Muy completo. Te pongo cuatro puntos para el lab.
ResponderEliminar