• Lunes 27 de Mayo de 2024, 18:32

Autor Tema:  problema recursion  (Leído 1094 veces)

eruelas

  • Miembro activo
  • **
  • Mensajes: 69
  • Nacionalidad: mx
    • Ver Perfil
problema recursion
« en: Miércoles 4 de Marzo de 2009, 04:16 »
0
Hola a todos ps tengo un pekeño problemilla kon una funcion de recursion la kual me debe mostrar la conversion de un numero decimal a binario lo he intentado diferentes maneras pero ps la recursion se me dificulta no c si alguien me pueda guiar kon esto por favor
esto es lo k llevo
Citar
#include<conio.h>
#include<iostream.h>
class Recursivo
   {
      public:
         int arr[30];
         int multi(int, int);
         int divi(int, int);
         int fact(int);
         int decbin(int);
         int burbuja(int arr[], int n);
         void imprime();
         Recursivo() ;
         ~Recursivo() ;
   };
Recursivo::Recursivo()
{
for (int t=0;t<8;t++)
arr[t]=0;
}
Recursivo::~Recursivo()
{}
int Recursivo::multi(int a, int b)
   {
      if (b==0) return 0;
      else return a+ multi(a,b-1);
   }
int Recursivo::divi(int c, int d)
   {
      if (c==0||c<d) return 0;
      else if(d==0){
      cout<<"No se puede";
      return -1;    }
      else
      return divi(c-d,d)+1;
   }
int Recursivo::fact(int n)
   {
   if (n==0||n==1)
   return 1;
   else
   return n*fact(n-1) ;
   }
int Recursivo::decbin(int p)
   {
   if (p==0||p==1)
   {
   arr[0]=p;
   return 1;
   }
   else
   {
   arr[decbin(p/2)]=p%2;
   return   decbin(p/2)+1;
   }
   }
void Recursivo::imprime()
     {
   for(int o=1;o<8;o++)
   cout<<arr
  •  ;

   }

int Recursivo::burbuja(int arr[30],int n)
{
   int aux;
      for (int i=0;i==n-1;i++)
         {
            for(int j=0;j=n-i-1;i++)
               {
                  if (arr[j]>arr[j+1])
                  aux=arr[j];
                  arr[j]=arr[j+1];
                  arr[j+1]=aux;
               }
         }
}
void main()
{
   clrscr();
   Recursivo r;
   cout<<"Burbuja es:"<<r.burbuja<<endl;
   cout<<"El valor en binario es: "<<r.decbin(5)<<endl;
   cout<<"El valor del factorial es: "<<r.fact(5)<<endl;
   cout<<"El valor de 4x4 es: "<<r.multi(4,4)<<endl;
   cout<<"El valor de la division es :"<<r.divi(9,3);
   getch();
}

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: problema recursion
« Respuesta #1 en: Miércoles 4 de Marzo de 2009, 12:39 »
0
Hola ControlCD

Usa las etiquetas de código, por favor, no las de citar  ^_^

Primero fíjate que el método decbin() no debería devolver nada, porque el valor se almacena en un array según como lo tienes hecho, así que para visualizarlo deberías poner:

Código: C
  1. r.decbin(5);
  2. cout<<"El valor en binario es: "<<r.imprime()<<endl;
  3.  
Aparte, para la recursividad, creo que lo más sencillo es un método auxiliar privado que realmente sea quien haga la recursividad, esto es:

Código: C
  1. void Recursivo::decbin(int p)
  2. {
  3.    decbinaux(p,0);
  4. }
  5.  
  6. private:
  7.  
  8. void Recursivo::decbinaux(int p, int pos)
  9. {
  10.    if (p<=1)
  11.       arr[pos]=p;
  12.    else
  13.    {
  14.       arr[pos++]=p%2;
  15.       decbinaux(p/2, pos);
  16.    }
  17. }
  18.  
Así no tenemos que rompernos la cabeza con la posición en el vector arr[].

Espero te haya sido de ayuda. Salud.

P.D: ojo con los números negativos, deberías de utilizar el modificador unsigned para los tipos.

eruelas

  • Miembro activo
  • **
  • Mensajes: 69
  • Nacionalidad: mx
    • Ver Perfil
Re: problema recursion
« Respuesta #2 en: Miércoles 4 de Marzo de 2009, 17:07 »
0
gracias tienes razon en usar el aux deja ver en k kedo despues aviso  :beer: