Menu
CoddyTech

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:

  1. El caso base indica cuándo detenerse.
  2. 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 recursivo

factorial(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"))
olleh
challenge icon

Desafío

Fácil

Escribe 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) es 0
  • fibonacci(2) es 1
  • para n > 2, fibonacci(n) es fibonacci(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
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 GDScript online