Printing 1 to 1000 without loop or conditionals Printing 1 to 1000 without loop or conditionals c c

Printing 1 to 1000 without loop or conditionals


This one actually compiles to assembly that doesn't have any conditionals:

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


Edit: Added '&' so it will consider the address hence evading the pointer errors.

This version of the above in standard C, since it doesn't rely on arithmetic on function pointers:

#include <stdio.h>#include <stdlib.h>void f(int j){    static void (*const ft[2])(int) = { f, exit };    printf("%d\n", j);    ft[j/1000](j + 1);}int main(int argc, char *argv[]){    f(1);}


Compile time recursion! :P

#include <iostream>template<int N>struct NumberGeneration{  static void out(std::ostream& os)  {    NumberGeneration<N-1>::out(os);    os << N << std::endl;  }};template<>struct NumberGeneration<1>{  static void out(std::ostream& os)  {    os << 1 << std::endl;  }};int main(){   NumberGeneration<1000>::out(std::cout);}


#include <stdio.h>int i = 0;p()    { printf("%d\n", ++i); }a()    { p();p();p();p();p(); }b()    { a();a();a();a();a(); }c()    { b();b();b();b();b(); }main() { c();c();c();c();c();c();c();c(); return 0; }

I'm surprised nobody seems to have posted this -- I thought it was the most obvious way. 1000 = 5*5*5*8.