Salida inesperada de la función principal por llamada repetida

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.

  • Primero establece i = 0.
  • el primero si (i <5) pasa, por lo que se está incrementando (nota: i ++ significa que aún soy 4, pero cuando se usa a continuación, el valor es 5).
  • La llamada a main, la variable estática i y el conteo mantienen sus valores ya que las variables estáticas no se sobrescriben, de esa manera el progtwig pasa si (i <5) hasta que i = 5, luego si (i <5) devuelve false y la quinta llamada a los extremos principales abruptamente.
  • 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) 
  • Cuando el conteo llegó a 5, alcanzamos el nivel “superior” de nuestra stack de llamadas recursivas nuevamente y el progtwig finaliza.