DEV Community

Leo
Leo

Posted on

recursiones e iteraciones

cpp



#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>

using namespace std;

int FactorialRec( int N ) { return N == 0 ? 1 : FactorialRec( N-1 ) * N; }

int FactorialIte( int N )
{
  int fact = 1;

  while ( N > 0 ){

    fact *= N;
    N--;
  }

  return fact;
}

int FibonacciRec( int N ) { return N==0 || N==1 ? N : FibonacciRec( N - 1 ) + FibonacciRec( N - 2 ); }

int FibonacciIte( int N )
{
    if ( ( N == 0) || ( N == 1) ) return N; 

    int fibo, a = 0, b = 1, i = 2;

    while ( i <= N ) {
        fibo = b + a;
        a = b;
        b = fibo;
        i++;
    }

    return fibo;
}

void HanoiRec( int N, char Orig, char Dest, char Aux )         
{
    if ( N == 1 ) cout << "Mover un disco de " << Orig << " a "<< Dest<< endl;

    Hanoi( N - 1, Orig, Aux, Dest);
    cout << "Mover un disco de " << Orig << " a "<< Dest<< endl;
    Hanoi( N - 1, Aux, Dest, Orig);
}

void HanoiIte( int N, char Orig, char Dest, char Aux ){


}

int EuclidesRec( int M, int N ){ return N == 0 ? M : EuclidesRec( N, M % N); }

int EuclidesIte( int M, int N ){

    while ( N != 0 ){

        int x = N;
        N = M % N;
        M = x;
    }

    return M;
}

void Ackermann( int M, int N ){

    if ( M == 0 ){ return N + 1;}

    else {

        if ( N == 0 ) return Ackermann( M - 1, 1 );
        return Ackermann( M - 1, Ackermann( M, N - 1));
    }
}

void MenuPrincipal()
{
  int Opc, Num;
  char Frase[ 20 ];
  char Orig, Dest, Aux;
  int N, M;

  do {
       system("cls");
       cout << "Ejemplos utilizando algoritmos Recursivos" << endl;
       cout << "1. Factorial Recursivo." << endl;
       cout << "2. Factorial Iterativo." << endl;
       cout << "3. Fibonacci Recursivo." << endl;
       cout << "4. Fibonacci Iterativo." << endl;
       cout << "5. Euclides Recursivo." << endl;
       cout << "6. Euclides Iterativo." << endl;
       cout << "7. Invierte Cadena." << endl;
       cout << "8. Palindromo." << endl;
       cout << "9. Ackermann." << endl;
       cout << "10. Torres de Hanoi Recursivo." << endl;
       cout << "11. Torres de Hanoi Iterativo." << endl;
       cout << "0. Salir." << endl;

       cout << "Opcion: "; cin >> Opc;

       switch (Opc) {
         case 1: // Numero factorial
                 system("cls");
                 cout << "Dame un numero: ";
                 cin >> Num;
                 cout << "El factorial de " << Num << " es = " << FactorialRec(Num) << endl;
                 system("Pause");  
                 break;

        case 2: // Serie fibonacci
                 system("cls");
                 cout << "Dame un numero: ";
                 cin >> Num;
                 cout << "La serie Fibonacci de " << Num << " es = " << FibonacciRec(Num) << endl;
                 system("Pause");  
                 break;

        case 3: // Algoritmo de Euclides o MCD

        case 4: // Invierte Cadena
                system("cls");
                cout << "Escriba una frase: ";
                cin >> Frase;
                //cout << Invierte( Frase, 0, strlen( Frase )-1 );
                system("PAUSE");
                break;

        case 5: // Palindromo


        case 6: // Algoritmo de Ackermann

        case 7: // Torres de Hanoi
                Orig= 'A';
                Aux= 'B';
                Dest= 'C';

                cout << "Numero de discos: ";
                cin >> N;

                cout << "\n Los movimientos a realizar son: \n";
                Hanoi( N, Orig, Dest, Aux);         
                system("Pause");
                break; 
       };            

  } while (Opc!=0);
}

int main (){

  MenuPrincipal(); 
  getchar();

  return 0;
}


Enter fullscreen mode Exit fullscreen mode

Top comments (0)