Preguntado por Shobhit
#include<stdio.h> int fun(int n, int *fg) { int t, f; if(n <= 1) { *fg = 1; return 1; } t = fun(n-1, fg); f = t + *fg; *fg = t; return f; } int main( ) { int x = 15; printf ( "%d\n", fun (5, &x)); getchar(); return 0; }
En el programa anterior, habrá llamadas recursivas hasta que n no sea menor o igual a 1.
fun(5, &x) \ \ fun(4, fg) \ \ fun(3, fg) \ \ fun(2, fg) \ \ fun(1, fg)
fun(1, fg) ya no llama a fun() porque n es 1 ahora, y va dentro de la parte if. Cambia el valor en la dirección fg a 1 y devuelve 1.
Diversión interior (2, fg)
t = fun(n-1, fg); --> t = 1 /* After fun(1, fg) is called, fun(2, fg) does following */ f = t + *fg; --> f = 1 + 1 (changed by fun(1, fg)) = 2 *fg = t; --> *fg = 1 return f (or return 2)
Diversión interior (3, fg)
t = fun(2, fg); --> t = 2 /* After fun(2, fg) is called, fun(3, fg) does following */ f = t + *fg; --> f = 2 + 1 = 3 *fg = t; --> *fg = 2 return f (or return 3)
Diversión interior (4, fg)
t = fun(3, fg); --> t = 3 /* After fun(3, fg) is called, fun(4, fg) does following */ f = t + *fg; --> f = 3 + 2 = 5 *fg = t; --> *fg = 3 return f (or return 5)
Diversión interior (5, fg)
t = fun(4, fg); --> t = 5 /* After fun(4, fg) is called, fun(5, fg) does following */ f = t + *fg; --> f = 5 + 3 = 8 *fg = t; --> *fg = 5 return f (or return 8 )
Finalmente, se imprime el valor devuelto por fun(5, &x), por lo que se imprime 8 en la pantalla
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA