Supongamos que estamos escribiendo una función recursiva simple fib(n)
que calcula el enésimo número de Fibonacci. Ahora, queremos que la función imprima ese enésimo número. Como se está llamando repetidamente a la misma función, tiene que haber una condición que permita solo imprimir la llamada raíz. La pregunta es: cómo escribir esta condición sin pasar ningún argumento adicional, o usar variables globales/estáticas.¿Cómo detectar la llamada recursiva raíz?
Por lo tanto, estamos tratando con algo como esto:
int fib(int n) {
if(n <= 0) return 0;
int fn = 1;
if(n > 2) fn = fib(n-2) + fib(n-1);
if(???) cout << fn << endl;
return fn;
}
int main() {
fib(5);
return 0;
}
pensé que la llamada raíz difiere de todos los niños antes de regresar a una persona que llama diferente, a saber, el método principal en este ejemplo. Quería saber si es posible usar esta propiedad para escribir la condición y cómo.
Actualización: tenga en cuenta que este es un ejemplo artificial que solo sirve para presentar la idea. Esto debería quedar claro a partir de las etiquetas. No estoy buscando soluciones estándar. Gracias.
Como se señala en muchas respuestas, es una práctica común crear una función de envoltura que inicia la recursión. El procesamiento personalizado antes/después (como IO) puede ir allí. –