Funciones recursivas, parte 1
Parte de la sección Lógica y flujo del Journey de GDScript de Coddy. Lección 57 de 78.
Una función recursiva es una función que se llama a sí misma. Cada llamada resuelve una versión más pequeña del problema, hasta que el problema es lo suficientemente pequeño como para responderlo directamente.
Esta función suma los números enteros desde 1 hasta n:
func sum_to_n(n: int) -> int:
if n == 0: # caso base
return 0
return n + sum_to_n(n - 1) # paso recursivoTiene dos partes:
- El caso base responde sin volver a llamar a la función: la suma hasta
0es0. - El paso recursivo llama a la función con un valor menor,
n - 1, y construye su respuesta a partir del resultado.
sum_to_n(3) es 3 + sum_to_n(2), que es 3 + 2 + sum_to_n(1), que es 3 + 2 + 1 + sum_to_n(0). El caso base devuelve 0, y las llamadas en espera terminan una por una: el resultado es 6.
Cada paso recursivo debe acercarse al caso base. Sin un caso base, o con un paso como n + 1 que nunca lo alcanza, la función sigue llamándose a sí misma. Godot permite unas 1.000 llamadas anidadas y luego detiene el programa con un error.
Desafío
FácilEl programa lee un número entero n (0 o más) y llama a count_down(n).
Debajo de _ready(), escribe la función recursiva count_down con un parámetro. Imprime todos los números desde su argumento hasta 0, uno por línea. No uses ningún bucle: la función imprime su número y se llama a sí misma con el siguiente número menor.
Para la entrada 3, la salida es:
3
2
1
0Pruébalo tú mismo
extends Node
func _ready():
var n := int(OS.read_string_from_stdin())
count_down(n)
# Escribe la función recursiva count_down(n) a continuación
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
1Cadenas de texto en profundidad
Métodos de cadenasBúsqueda en cadenasReemplazar y eliminar espaciosDividir y unirRepaso - Comprobación del nombre de usuario4Diccionarios, parte 2
Diccionarios anidadosArrays de diccionariosCombinar diccionariosCopiar diccionariosRepaso: contador de frecuencias7Enumeraciones
¿Qué es una enumeración?Definir una enumeraciónValores de una enumeraciónEnumeraciones en matchRepaso: semáforo10Funciones avanzadas
Devolver múltiples valoresFunciones lambda, parte 1Funciones lambda, parte 2Repaso: ordenar con lambdaFunciones recursivas, parte 1Funciones recursivas, parte 2Repaso: sumar un array anidado13Sistema de gestión de inventario
Descripción general del proyectoAñadir artículo2Toma de decisiones avanzada
Coincidencia con variablesGuardas de coincidenciaPatrones de arraysPatrones de diccionariosComprobaciones de pertenenciaRepaso: analizador de comandos5Aplicación de agenda de contactos
Mostrar menúAñadir contacto8Gestor de expedientes estudiantiles
Descripción del proyectoAgregar estudiante3Arrays multidimensionales
Conceptos básicos de arrays 2DAcceso a elementos de arrays 2DBucles anidados con arrays 2DRepaso: arrays 2DArrays irregularesPatrones comunes de arrays 2DRepaso: tablero de juego6Conjuntos con diccionarios
¿Qué es un conjunto?El diccionario como conjuntoAñadir y eliminarUnión e intersecciónDiferencia de conjuntosRepaso: eliminar duplicados9Agregación avanzada de datos
Suma de valoresCómo encontrar el mínimo y el máximoOrdenación personalizadaRepaso: organizador de diccionariosPractica por tu cuenta: Compilador de GDScript online