Estoy ejecutando un código escrito en C y está dando un resultado inesperado que no pude resolverlo. ¿Por qué el valor de I se imprime cinco veces?
Aquí está el código de abajo:
#include void main() { static int i = 0; static int count =0; if (i<5){ i++; main(); printf("%d\n",i); ++count; printf("%d\n",count); } }
Aquí está la salida:
5 1 5 2 5 3 5 4 5 5
No hay nada malo con la salida.
Como en la quinta llamada a main no pasa nada, el valor de i ahora sigue siendo 4, pero dado que incrementó i a través de i ++, i en printf () ahora es 5, ya que este es el tiempo que se usa primero después de la incrementación. Printf muestra:
5
el conteo se incrementa a través de ++ count (conteo ++ significa que el valor se incrementa instantáneamente, por lo que el conteo es ahora 1). Printf muestra:
1
Ahora el bucle recursivo termina. Para cada “nivel” la línea
main();
Se termina de llamar, así que la siguiente línea es
printf("%d\n", i);
ya que nunca más cambiamos el valor de i (porque para todos los “niveles” ya incrementamos i hasta 5), la consola nos muestra 5 veces el valor de 5 para la variable i.
La única cosa que todavía cambiamos es la cuenta variable. Dado que el recuento de la variable aún se está incrementando DESPUÉS de la llamada recursiva a main, el recuento aún se sum a 5. Por lo tanto, la salida se ve así:
5 (i, level 5) 1 (count, level 5) 5 (i, level 4) 2 (count, level 4) 5 (i, level 3) 3 (count, level 3) 5 (i, level 2) 4 (count, level 2) 5 (i, level 1) 5 (count, level 1)