Imprime de 1 a 1000 sin usar el bucle

Veo la pregunta en un contexto de progtwigción en C ++, busco una solución y uno de mis amigos me da este código que funciona perfectamente, pero no puedo entender su lógica y también cómo funciona. Le pregunté al respecto, pero tampoco sabe cómo funciona realmente el progtwig, creo que también está tomando esta solución de algún lado. Cualquiera puede explicar la lógica detrás de esto, quiero decir en la línea (&main + (&exit - &main)*(j/1000))(j+1); ?

 #include  #include  void main(int j) { printf("%d\n", j); (&main + (&exit - &main)*(j/1000))(j+1); } 

Gracias por adelantado

Funciona de la siguiente manera:

Realiza la división int j/1000 , que devolverá 0 siempre que j sea ​​menor que 1000 . Así que la operación del puntero es la siguiente:

 &main + 0 = &main, for j < 1000. 

Luego llama a la función resultante apuntada por las operaciones de puntero que pasan como parámetro j+1 . Mientras que j es menor que 1000 , llamará a main de forma recursiva con el parámetro uno más que el paso anterior.

Cuando el valor de j alcanza 1000 , entonces la división entera j/1000 es igual a 1 , y la operación del puntero da como resultado lo siguiente:

 &main + &exit - &main = &exit. 

A continuación, llama a la función de exit , que finaliza la ejecución del progtwig.

Sigo con la explicación ya dada, pero sería más fácil de entender si se escribe a continuación:

 void main(int j) { if(j == 1001) return; else { printf("%d\n", j); main(j+1); } } 

El código anterior hace lo mismo que el código ya escrito.