Ejercicio 03 — Escribe factorial(n) iterativo

Dificultad: amarillo · Módulo 04 (Funciones)

Enunciado

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

Diagramas de flujo

Diagrama de flujo (actividad) del ejercicio 03

Diagrama de flujo (grafo) del ejercicio 03

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)}")

Ejecútalo en el navegador

▶ Visualízalo paso a paso en Python Tutor — ve cómo cambian las variables línea a línea.

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