c++ - sintaxis - recursividad matematica ejemplos
Recursión infinita sin desbordamiento: ¿es posible? (1)
Sí, es posible, hay dos tipos de funciones recursivas. El tipo que está buscando son las funciones recursivas primitivas , estas son equivalentes a un bucle simple. Y normalmente se implementan con recursividad de cola , donde la pila se mantiene constante y la función nunca regresa a través de la pila.
Algunos compiladores C ++ podrían detectar algunas funciones recursivas primitivas y traducirlas a una construcción de bucle en lugar de llamadas a funciones. Pero esto solo funciona mientras el compilador sea capaz de reconocer lo que está sucediendo. Entonces la respuesta es quizás. Básicamente, si el programador hace algo altamente ineficaz, entonces el compilador puede o no ser capaz de ayudar. Por lo tanto, el proceso habitual de "código, perfil, optimización, repetición" sigue vigente.
La razón del desbordamiento de la pila es porque se agota el espacio de la pila, pero ¿y si las funciones no tienen parámetros para que no se tengan que insertar datos en la pila? Eso todavía deja de empujar la dirección de "retorno", pero en un caso de recursión infinita intencional que sería innecesario.
Entonces, lo que estoy preguntando es ... si es posible usar algún tipo de convención de llamadas que la llamada no coloque nada en la pila y simplemente salte a la primera instrucción y se ejecute y siempre que la instrucción final sea otra llamada a una función hasta que finalice la ejecución? Idealmente, ¿si esto se puede implementar con punteros de función y vinculación dinámica?
Solo para especificar, me refiero a una función que toma un solo parámetro y no devuelve nada, por lo que técnicamente la llamada rápida será suficiente, pero aún conserva una dirección a la que volver, lo que eventualmente llevará al desbordamiento. ¿Se puede prevenir esto de alguna manera?
Otro punto importante que no mencioné antes, no me refiero a la recursión de una función única, por ejemplo, cuando el estado es estático y se está reutilizando, me refiero a la recursión de una función arbitraria en otra.