Ir al contenido principal

Calculando el factorial de un número (ejemplo de función recursiva).

Hola, mi nombre es Antonio Alfonso Martínez y en el presente artículo me dispongo a explicar un sencillo método para calcular el factorial de un número haciendo uso del concepto de recursividad.

Para empezar, diremos que el factorial de un número natural "n" es el resultado del producto de todos los números desde 1 hasta dicho número "n".

Así, para efectuar el calculo del factorial de un número, vamos a emplear una sencilla función a la que daremos el nombre de "factorial". De modo, que, partiendo del hecho de que el factorial de 1 y 0 es 1, construiremos nuestra función (a la que daremos el nombre de "factorial") para realizar el calculo del factorial de 5:

fact

Lo que hace esta función, es tomar como argumento un número "n". de modo que si este es 0 o 1 ("if n==0 or n==1:") la función devolverá directamente como resultado el número 1 ("resultado=1"). Sin embargo si dicho número "n" es mayor que 1 ("elif n>1:"), haremos que el resultado ("resultado") sea igual al producto de dicho número por el resultado de aplicar la misma función "factorial" por el mismo número menos 1 ("resultado=n*factorial(n-1)"). La peculiaridad de esta función reside, precisamente en ese último hecho, en la medida que se trata de una función que contiene una llamada a sí misma. Esto es lo que se conoce como función recursiva.

¿Pero como funciona exactamente la función recursiva "factorial" de nuestro ejemplo? Para empezar diremos que esta funciona mediante un proceso en el que para calcular el factorial de un número mayor que 1 (ya que si es igual a 1 el resultado será directamente 1),"n" tenemos que calcular el producto de dicho número por el factorial del número inmediatamente inferior a dicho número (n-1). El problema es que, tampoco sabemos el factorial de "n-1", con lo que tendremos que dejar el calculo del factorial de "n" en espera mientras calculamos el factorial de "n-1". Esta operación la iremos haciendo del mismo modo hasta que "n" sea 1, momento en que tendremos un resultado concreto (1) que será aplicando de forma acumulada a las funciones factoriales que hayamos dejado en espera.

Para ilustrar este proceso, nos valdremos de una imagen mediante la que expresamos como funciona nuestra función recursiva "factorial" para un valor de "n" igual a 4, en donde hemos sustituido "n" por su valor actual en cada paso del proceso recursivo:

call

Así partimos de n=4 como argumento.Dado que 4 es mayor que 1, el "resultado" será igual al producto de 4 por la aplicación de la misma función "factorial" sobre 3 ("n-1"). A su vez, como 3 sigue siendo mayor que 1, el "resultado" será 3*factorial(2). Ahora aplicamos la función "factorial" sobre 2, que sigue siendo mayor que 1, con lo que el "resultado" será 2*factorial(1). Cuando "n" adopta el valor de 1, se produce el hecho de que obtenemos, en la función un resultado concreto ("resultado=1"), con el que emprenderemos el camino de vuelta, aplicándose los resultados, sucesivamente y de forma acumulada, a las funciones que habían quedado en espera, hasta obtener el resultado final de 24.
 Así nuestra función nos daría un resultado final de 24. A su vez, si introducimos una sentencia "print" para visualizar el valor de "resultado" podríamos ver los valores acumulados de las sucesivas funciones "factorial" hasta llegar el resultado final:

fafafaff

Lo que da como resultado:

dadadda

Saludos.




Comentarios

Entradas más populares de este blog

Ejercicios de Programación en Java: Condicionales, Bucles, Tablas y Funciones

PRÓLOGO El libro Ejercicios de Programación en Java: Condicionales, Bucles, Tablas y Funciones nace como fruto de años de docencia en materias relacionadas: Algorítmica, Programación, Lenguaje C y Java, entre otros.  Con el paso del tiempo he constatado que aprender un lenguaje de programación es relativamente sencillo y sobre este tema existen muchos y muy buenos textos. Pero aprender a programar es algo totalmente distinto, que necesita de un mayor esfuerzo y abordar el problema desde otra perspectiva. Siempre utilizo la metáfora del pianista para explicar el tándem programar/lenguaje de programación: saber tocar las notas de un piano es relativamente fácil, tan solo debemos anotar en cada una de las teclas a qué nota musical corresponde. Esto sería similar a conocer un lenguaje de programación. Es muy sencillo utilizar un if o entender la mecánica de un while .  Volviendo al piano: una vez que dominamos la relación tecla/nota, un pianista debe aprender muchas ot...

Descargar vídeos y audios de YouTube con Python y Pafy

Introducción: YouTube es una plataforma que nos permite disfrutar de vídeos informativos, películas, música y mucho, mucho más. Siempre que escuchamos una canción queremos descargarla, si vemos un vídeo también queremos descargarlo, de esta manera podríamos verlos desde donde queramos sin necesidad de una conexión a Internet. Hoy te enseñare a descargar vídeos y audios de el sitio web conocido como YoutTube, esto lo lograremos haciendo uso de una librería llamada Pafy, si aun no tienes la librería Pafy, puedes descargarla ingresando al siguiente enlace:  Librería Pafy . Usando Pafy: Pafy una biblioteca de Python para descargar contenido de YouTube y recuperar metadatos. Antes de descargar contenido, usaremos a Pafy para obtener información de un vídeo especifico. A continuación te mostrare un ejemplo para obtener el titulo de un vídeo. import pafy url_video = " https://www...