Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
Profesor Adolfo Di Mare
CI-1201
II Semestre 2006
[<=] [home] [<>] [\/] [=>]
CI-1201 Programación II

Tarea #2 [solución]

Cinco formas diferentes de explicar la recursividad

      Tome como base el artículo sobre la recursividad mencionado abajo y úselo para explicar qué hacen los programas EnPile.cpp y Numeral.cpp. Documente y ejecute esos programas, y arréglelos si es necesario. Hágales la documentación usando Doxygen. Documente su experiencia.

// Numeral.cpp (C) 2006  adolfo@di-mare.com

#include <iostream>

void Numeral(long n) {
    long i = 1;
    bool esta = false;
    while ( (!esta) && (i < n / 2)) {
        ++i;
        esta = (n % i == 0);
    }

    if (esta) {
        cout << i << endl;
        Numeral(n / i);
    }
}

int main() {
    int N;
    N =   512; cout << "==>" << endl; Numeral(N);
    N = 10000; cout << "==>" << endl; Numeral(N);
    N =   420; cout << "==>" << endl; Numeral(N);
    return 0;
}

// EOF: Numeral.cpp

Di Mare, Adolfo
Tres formas diferentes de explicar la recursividad; Revista Ingeniería, Facultad de Ingeniería, Universidad de Costa Rica, Volumen 6, Número 2, pp [31-44], 1996.
      http://www.di-mare.com/adolfo/p/recurse1.htm

// EnPile.cpp (C) 2005  adolfo@di-mare.com

/** \file  EnPile.cpp
    \brief Un ejemplo interesante de recursividad

    \author Adolfo Di Mare <adolfo@di-mare.com>
    \date   2005

    \remark Di Mare, Adolfo:
     - "Tres formas diferentes de explicar la recursividad"
       - Revista Ingeniería, Facultad de Ingeniería,
         Universidad de Costa Rica,
         Volumen 6, Número 2, pp [31-44], 1996.
       - http://www.di-mare.com/adolfo/p/recurse1.htm#otros
*/

#include <iostream>

/** Invierte una hilera de letras que lee de \c "cin"
    \code
    C:\TMP>EnPile
    Digite la hilera a invertir:
    adolfo.
    .ofloda
    \endcode
*/
void EnPile() {
    char ch;   // variable local ==> 1 nueva en cada invocación
    cin >> ch; // lee otra letra

    if (ch != '.') {
        EnPile();
    }
    cout << ch;
}

/** No invierte una hilera de letras que lee de \c "cin"
    \code
    C:\TMP>EnPile
    Digite la hilera a invertir:
    adolfo.
    .......
    \endcode
*/
void EnPile(char & ch) {
    cin  >> ch; // lee otra letra
    cout << ch; // la graba
    if (ch != '.') {
        EnPile(ch);
    }
    cout << ch;
}

int main() {
    char ch;
    EnPile();
    EnPile(ch);
    return 0;
}

// EOF: EnPile.cpp

      Entregue su tarea por correo electrónico, como lo hizo anteriormente.

[mailto:] Entrega de Tareas

Tiempo de entrega: 1 semana
Modalidad: En parejas

Soluciones

[mailto:] Adolfo Di Mare <adolfo@di-mare.com>.
Copyright © 2006
Derechos de autor reservados © 2006
[home] <> [/\]