Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: geeke en 15 Septiembre 2015, 22:32 pm



Título: Como imprime este programa varios números sin bucles ni recursión
Publicado por: geeke en 15 Septiembre 2015, 22:32 pm
Me he encontrado un codigo en C++ muy extraño, el cual imprime una determinada contidad de numeros uno debajo de otro, hasta ahi todo normal pero lo hace sin usar ningun tipo de bucles ni recursión.

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. template<int N>
  5. class PrintOneToN
  6. {
  7. public:
  8.    static void print()
  9.    {
  10.        PrintOneToN<N-1>::print();  // Note that this is not recursion
  11.        cout << N << endl;
  12.    }
  13. };
  14.  
  15. template<>
  16. class PrintOneToN<1>
  17. {
  18. public:
  19.    static void print()
  20.    {
  21.        cout << 1 << endl;
  22.    }
  23. };
  24. int main()
  25. {
  26.    const int N = 100;
  27.    PrintOneToN<N>::print();
  28.    return 0;
  29. }

Alguien entiendo como funciona este codigo?. Si es asi podria explicarme porfavor ..


Título: Re: Como imprime este programa varios números sin bucles ni recursión
Publicado por: patilanz en 15 Septiembre 2015, 22:55 pm
Creo que dice que no es recursión porque usando las plantillas crea una función diferente para cada numero y cuando llega al ultimo el 1 se llama a la función preparada.
No estoy del todo seguro, que alguien lo confirme.

Un saludo


Título: Re: Como imprime este programa varios números sin bucles ni recursión
Publicado por: ivancea96 en 15 Septiembre 2015, 23:04 pm
Lo confirmo.

No sé de donde sacaste el código, pero aquí lo explican:
http://www.geeksforgeeks.org/output-of-c-program-set-18-3/ (http://www.geeksforgeeks.org/output-of-c-program-set-18-3/)


Título: Re: Como imprime este programa varios números sin bucles ni recursión
Publicado por: geeke en 15 Septiembre 2015, 23:21 pm
Muchas gracias por el enlace son unos crack con Google por aqui xD .. la verdad no recuerdo de donde la saque pero era un foro en ingles, ahora voy a leer la pagina que me pasaste..