Qué significa
Error al ejecutar en la línea 2
Demasiadas llamadas a funciones, una dentro de otra. ¿Una función recursiva que nunca llega a su caso base?
Una función puede llamarse a sí misma; a eso se le llama recursión. Para que funcione, necesita un caso base: una situación en la que ya no se llama más y responde directo. Sin caso base, las llamadas se apilan una dentro de otra sin fin, y Jaguar se detiene al llegar a un límite.
El otro error es más sencillo: una función con valor de retorno (Funcion r <- doble(n)) tiene que darle un valor a r antes de terminar.
Ejemplos y cómo arreglarlos
Recursión sin caso base
Funcion r <- f(n)
r <- f(n + 1)
FinFuncion
Algoritmo a
Escribir f(1)
FinAlgoritmo
Esta función siempre se llama a sí misma. Agrega el caso base, el momento en que responde sin llamar de nuevo:
Funcion r <- suma(n)
Si n = 0 Entonces
r <- 0
SiNo
r <- n + suma(n - 1)
FinSi
FinFuncion
Algoritmo a
Escribir suma(4)
FinAlgoritmo
Una función que no devuelve nada
Funcion r <- doble(n)
n <- n * 2
FinFuncion
Algoritmo a
Escribir doble(4)
FinAlgoritmo
Error al ejecutar en la línea 5
La función 'doble' terminó sin darle un valor a 'r'.
El resultado hay que guardarlo en r, el nombre que va después de Funcion:
Funcion r <- doble(n)
r <- n * 2
FinFuncion
Algoritmo a
Escribir doble(4)
FinAlgoritmo
Por qué aparece
- La recursión no tiene caso base, o el caso base nunca se alcanza porque el valor se aleja en vez de acercarse.
- Se llama a la función con el mismo dato una y otra vez.
- Se escribió el resultado en otra variable y no en la que nombra la función.
- El valor se asigna dentro de un
Sique no siempre se cumple.
Cómo evitarlo
Escribe primero el caso base y después el caso que se llama a sí mismo, y comprueba que cada llamada se acerca un paso al caso base: n - 1 se acerca a 0, n + 1 se aleja. Para las funciones normales, que el nombre del resultado siempre reciba un valor, con un SiNo si hace falta.
Preguntas frecuentes
¿Cuántas llamadas aguanta Jaguar?
Hasta 200 llamadas, una dentro de otra. Una recursión legítima, como sumar hasta 190, funciona sin problema.
¿Puedo evitar la recursión?
Casi siempre sí: un ciclo Para o Mientras hace lo mismo. La recursión es una forma más corta de escribir ciertos problemas, pero no es obligatoria.