Funciones recursivas, parte 2
Parte de la sección Lógica y flujo del Journey de GDScript de Coddy. Lección 58 de 78.
Toda función recursiva tiene las mismas dos partes:
- El caso base indica cuándo detenerse.
- El paso recursivo llama a la función con una entrada más pequeña.
El factorial de n es n * (n - 1) * ... * 1, así que el factorial de n es n multiplicado por el factorial de n - 1:
func factorial(n: int) -> int:
if n == 1: # caso base
return 1
return n * factorial(n - 1) # paso recursivofactorial(5) llama a factorial(4), que llama a factorial(3), hasta llegar a factorial(1), que devuelve 1. Al regresar, cada llamada multiplica: el resultado es 120.
Una entrada más pequeña no tiene por qué ser un número más pequeño. También sirve una cadena más corta. Esta función invierte una cadena:
func reverse_text(text: String) -> String:
if text.length() <= 1: # caso base
return text
return reverse_text(text.substr(1)) + text[0]text.substr(1) es la cadena sin su primer carácter. La función invierte esa cadena más corta y añade el primer carácter al final. Una cadena de cero o un carácter ya está invertida, así que es el caso base.
print(reverse_text("hello"))ollehDesafío
FácilEscribe una función recursiva llamada fibonacci que tome un número entero positivo n y devuelva el enésimo número de Fibonacci:
fibonacci(1)es0fibonacci(2)es1- para
n > 2,fibonacci(n)esfibonacci(n - 1) + fibonacci(n - 2)
Por ejemplo, fibonacci(6) devuelve 5 (la secuencia empieza por 0, 1, 1, 2, 3, 5).
Las pruebas llaman a fibonacci() por sí mismas. No la llames ni imprimas nada.
Pruébalo tú mismo
func fibonacci(n: int):
# Escribe el código aquí
pass
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