_operaciones matemáticas_python

Tutorial Matemáticas con Python: Calcula el factorial de un número

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 cálculo 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 cálculo del factorial de 5:

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.

¿Cómo funciona exactamente la función recursiva «factorial»?

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 cálculo 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:

MATEMÁTICAS CON PYTHON

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.

Bootcamp web

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:

Lo que da como resultado:

#FUNCI”N PARA CALCULO DEL FACTORIAL DE "n". def factorial(n): if n== 0 or n == 1: resultado = 1 print(resultado) elif n > 1: resultado = n * factorial(n-1) print(resultado) return resultado ress=factorial(4) print(ress)

Un saludo, muchas gracias.

Antonio Alfonso Martínez

Antonio Alfonso Martínez

Programador y desarrollador autodidacta. Semanalmente publica en el blog El programador Chapuzas (wordpress) y también colaboro en las páginas “Código Comentado” y “Algoritmos MathPy” de Facebook.

 

Si tienes algo que deseas compartir o quieres formar parte de JustCodeIt, escríbenos a [email protected].



 

 

Share this:

2 comments, add yours.

Luis M

¡Guau! Muy bueno este post y por enseñar como hacer está función, desde hace tiempo trataba de hacer esto, y lo has explicado de la mejor manera ¡Muchas gracias! 😀

    KeepCoding Team

    KeepCoding Team

    Autor

    Muchas gracias a ti Luis. Le haremos saber a Antonio (el autor) tu comentario 🙂

Leave a comment