Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Este es el main:
vmporcayom
1271
1 medalla de plata
13
13 medallas de bronce
añade un comentario
1 respuesta
ActivoMás antiguoVotos
6
¿Qué es el stack?
El stack en java es una pila en la que se almacenan los datos referentes a la ejecución
de los métodos (variables internas, y demás).
¿Qué es el StackOverflow?
Cada vez que haces una llamada a un método, se reserva memoria en el stack.
Teniendo en cuenta que la memoria es finita, siempre existe la posibilidad de que esa
memoria se acabe llenando.
Cuando esa memoria se llena y haces una llamada más a otro método nuevo, la JRE no
es capaz de guardar los datos necesarios en memoria porque está llena, y entonces es
cuando se lanza el StackOverflow.
Del punto anterior te habrás dado cuenta de que, en teoría, es bastante fácil forzar un
StackOverflow. La parte buena es que en java, hay un montón de optimizaciones, tanto
del recolector de basura como por parte del compilador para evitar cosas así.
Cuando llamas a un método desde otro en java, se guarda la memoria del método inicial
y el recolector de basura no puede limpiarlo.
Esto normalmente no es problema porque no suele haber una cola de llamadas muy
larga entre métodos, pero en una llamada recursiva infinita, el stack se llena
rápidamente.
Por eso es muy importante dejar un retorno que se acerque cada vez más al caso trivial,
que en tu ejercicio es numero == 0.
¿Cuál es tu error?