Menu
Coddy logo textTech

Función recursiva: Factorial

Parte de la sección Lógica y Flujo del Journey de Dart de Coddy. Lección 49 de 65.

El factorial de un número es una operación matemática clásica, perfecta para demostrar la recursión. El factorial de un entero positivo n (escrito como n!) es el producto de todos los enteros positivos del 1 al n. Por ejemplo, 5! = 5 × 4 × 3 × 2 × 1 = 120.

Lo que hace que el factorial sea ideal para la recursión es que se descompone naturalmente en problemas más pequeños e idénticos. Para calcular 5!, puedes pensarlo como 5 × 4!. Y 4! es simplemente 4 × 3!, y así sucesivamente. Este patrón continúa hasta llegar a 1!, que es igual a 1.

int factorial(int n) {
  if (n <= 1) {
    return 1; // Caso base
  }
  
  return n * factorial(n - 1); // Paso recursivo
}

El caso base detiene la recursión cuando n <= 1, devolviendo 1. El paso recursivo multiplica el número actual por el factorial del siguiente número más pequeño. Cuando llamas a factorial(5), devuelve 5 * factorial(4), que devuelve 5 * 4 * factorial(3), y así sucesivamente hasta que alcanza el caso base.

Este enfoque demuestra cómo la recursividad resuelve problemas de manera elegante al reducirlos a versiones más simples del mismo problema, haciendo que los cálculos complejos se sientan naturales e intuitivos.

challenge icon

Desafío

Fácil

Crea un programa que calcule factoriales para varios números mediante recursión. Tu programa demostrará la función factorial recursiva procesando una lista de números y calculando sus factoriales.

  1. Lee una entrada de texto que contenga números separados por comas (por ejemplo, "3,5,0,7")
  2. Divide la cadena de entrada en números individuales y convierte cada uno en un entero
  3. Crea una función recursiva llamada factorial que reciba un parámetro entero n
  4. La función factorial debe implementar la siguiente lógica:
    • Caso base: Si n es menor o igual que 1, devuelve 1
    • Paso recursivo: Devuelve n multiplicado por factorial(n - 1)
  5. Para cada número de la lista de entrada, calcula su factorial mediante tu función recursiva
  6. Muestra los resultados indicando cada número y su factorial correspondiente
  7. Calcula y muestra la suma de todos los resultados factoriales

Por ejemplo, si la entrada es "4,3,2", tu programa debería mostrar:

Factorial Calculator
====================
Processing numbers: [4, 3, 2]
====================
Factorial Results:
4! = 24
3! = 6
2! = 2
====================
Sum of all factorials: 32
Calculation completed successfully

Si la entrada es "5,0,1", tu programa debería mostrar:

Factorial Calculator
====================
Processing numbers: [5, 0, 1]
====================
Factorial Results:
5! = 120
0! = 1
1! = 1
====================
Sum of all factorials: 122
Calculation completed successfully

Si la entrada es "6", tu programa debería mostrar:

Factorial Calculator
====================
Processing numbers: [6]
====================
Factorial Results:
6! = 720
====================
Sum of all factorials: 720
Calculation completed successfully

Tu programa debe implementar la función recursiva factorial, que se llama a sí misma con valores decrecientes hasta alcanzar el caso base. La función debe demostrar cómo la recursión descompone el cálculo del factorial en subproblemas más pequeños e idénticos. Usa la interpolación de cadenas para dar formato a los resultados de los factoriales como "$n! = $result". Recuerda que 0! es igual a 1 por definición matemática, y tu caso base debe gestionarlo correctamente.

Pruébalo tú mismo

import 'dart:io';

// TODO: Crea tu función factorial recursiva aquí

void main() {
  // Leer la cadena de entrada que contiene números separados por comas
  String? input = stdin.readLineSync();
  
  // Dividir la entrada y convertir a enteros
  List<int> numbers = input!.split(',').map((str) => int.parse(str.trim())).toList();
  
  // TODO: Escribe tu código a continuación para:
  // 1. Procesar cada número usando tu función factorial
  // 2. Calcular la suma de todos los factoriales
  // 3. Mostrar los resultados en el formato requerido
  
  print("Factorial Calculator");
  print("====================");
  print("Processing numbers: $numbers");
  print("====================");
  print("Factorial Results:");
  
  // TODO: Calcular y mostrar los resultados factoriales aquí
  
  print("====================");
  // TODO: Mostrar la suma de todos los factoriales
  print("Calculation completed successfully");
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo

Practica por tu cuenta: Compilador de Dart online