Ejercicio 03 — Escribe factorial(n) iterativo

Dificultad: amarillo · Módulo 04 (Funciones)

Enunciado

Escribe factorial(n) iterativo. Pide n al usuario e imprime n!.

Cómo se resuelve

Calcular el factorial de forma iterativa mezcla dos ideas: un acumulador que arrastra el producto y un caso base que se trata aparte.

  1. if n == 0: return 1 — por definición matemática 0! = 1. Lo resolvemos primero con un return temprano para que el bucle no tenga que preocuparse de ese caso raro.
  2. resultado = 1 — el acumulador arranca en 1, no en 0. Como vamos a multiplicar, empezar en 0 dejaría todo en 0; 1 es el elemento neutro del producto.
  3. for i in range(2, n + 1): — recorre de 2 hasta n inclusive. range excluye el extremo derecho, por eso escribimos n + 1. Empezamos en 2 porque multiplicar por 1 no cambia nada.
  4. resultado *= i — en cada vuelta multiplica el acumulador por el i actual; al salir del bucle, resultado contiene 2*3*...*n. Ese valor lo entrega el return final.

Trampa habitual: en C tendrías que vigilar el desbordamiento (un int de 32 bits se pasa ya en 13!); en Python los enteros crecen sin límite fijo, así que factorial(100) funciona tal cual. Otro fallo típico: iniciar range en 1 o el acumulador en 0, o olvidar el + 1 y quedarte corto un factor.

Para practicar — cópialo y complétalo

Pega este esqueleto y completa los TODO. Es la mejor forma de aprender: inténtalo antes de mirar la solución.

# Curso de Python — Modulo 04: Funciones
# Ejercicio 03 — PRACTICA (rellena los TODO)
# Enunciado: Escribe factorial(n) iterativo. Pide n al usuario e imprime n!.
# Dificultad: amarillo
# Ejecutar: python3 ej03_practica.py
 
 
def factorial(n):
    """Devuelve n! de forma iterativa. n debe ser un entero >= 0."""
    # TODO: trata el caso base: si n == 0, devuelve 1 directamente
    # TODO: inicializa una variable resultado a 1
    # TODO: recorre range(2, n + 1) con un for y multiplica resultado por cada i
    # TODO: devuelve resultado
    pass
 
 
# TODO: pide n al usuario con int(input(...))
n = None  # reemplaza None
 
# TODO: imprime con f-string: "<n>! = <factorial(n)>"

Solución — cópiala y ejecútala

# Curso de Python — Modulo 04: Funciones
# Ejercicio 03 — MODELO (resuelto)
# Enunciado: Escribe factorial(n) iterativo. Pide n al usuario e imprime n!.
# Dificultad: amarillo
# Ejecutar: python3 ej03_modelo.py
 
 
def factorial(n):
    """Devuelve n! de forma iterativa. n debe ser un entero >= 0."""
    if n == 0:
        return 1
    resultado = 1
    for i in range(2, n + 1):
        resultado *= i
    return resultado
 
 
n = int(input("Introduce un entero >= 0: "))
print(f"{n}! = {factorial(n)}")

Cómo usarlo

Pega el código en un fichero y ejecútalo con tu toolchain habitual (o el botón de Ejecutar de tu editor). Antes de mirar la solución, intenta completar tú el esqueleto: es la mejor forma de aprender.

Conexiones