• Domingo 28 de Abril de 2024, 22:40

Autor Tema:  Ayuda Con Recursividad  (Leído 5618 veces)

abimmas

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Ayuda Con Recursividad
« en: Martes 17 de Mayo de 2005, 15:08 »
0
bueno antes que nada un saludo a toda la comunidad :D

pues he aqui que me he encontrado con un par
de problemas, necesito hacer un par de programas que son sencillos la potencia
de un numero X^Y y un programa que calcure el maximo comun divisor de un numero....
El problema aqui esque debe de ser por el metodo de recursividad, y no tengo
idea de como se haga eso alguien podria ayudarme ? ? ?


segun yo la tirada es hacerlo asi pero me marca errores..


#include<stdio.h>
#include<conio.h>



void main()
{
   clrscr();

   int n;
   int p;
   int res;
   int potencia(int n);

   printf("Programa para calcular la potencia de un numero por el metodo de recursividad. /n");
   printf("\nDame el n£mero: ");
   scanf("%d",&n);

   printf("\nDame la potencia a elevar: ");
   scanf("%d",&p);

   res=potencia(n);
   printf("\n la potencia  es: %d",res);
   getch();
}
potencia(int n,p)
{
   if(p>0)
        n;
      return(1);
   }
  {
   else
   return(n*n(p-1));
   }

shakka

  • Miembro HIPER activo
  • ****
  • Mensajes: 679
  • Nacionalidad: cr
    • Ver Perfil
    • http://mbrenes.com
Re: Ayuda Con Recursividad
« Respuesta #1 en: Martes 17 de Mayo de 2005, 17:00 »
0
En primer lugar estas tratando de capturar una variable entero usando formato decimal:

int n;
...
scanf("%d",&n);

deberias usar un double n;

igual con la variable p, res... o en su efecto si debieran ser enteros
scanf("%i",&n);

ademas a la funcion potencia, en la definicion le agregaste un parametro mas.
(p).
potencia(int n,p)
{
...

Que al parecer la quieres usar como una variable local con respecto a la funcion.

//podria ser...
potencia(int n)
{
int p;//si fuera el caso


..pero si la quieres como parametro entonces debes declaras explicitamente su tipo
potencia(int n,int p)
{
...
y que valor retornara en caso de ser por cola
int potencia(int n,int p)
{

o por boca
void potencia(int n,int p, int &retorno)
{


//en cuanto a la definicion de la funcion
...
//mmmm.. la veo un poco confusa
{
if(p>0)//falta una llave
->{
n;
return(1);
}//?
{
else
return(n*n(p-1));
}
//?*/?¿ç$·2#


//bueno el remiendo quedaria asi si es lo que pensabas hacer
..
{//abre potencia

if(p>0)
{
  n;
  return(1);
}
else
{
  return(n*n(p-1));
}

}//cierra potencia

revisa y despues me cuentas!!

niofis

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Ayuda Con Recursividad
« Respuesta #2 en: Viernes 17 de Junio de 2005, 20:15 »
0
Hola, tu funcion de potencia no está bien definida, no calcula potencias ni es recursiva, lo revisé y quedaria algo asi:

Citar
double potencia(double n, int p)
{
    if(p==0)
    {
        return 1.0;
    }
    else
    {
        return n*(potencia(n,p-1));
    }
}

Como puedes ver, no calculará potencias fraccionales, por lo que no puedes sacar raiz cuadrada elevando a 0.5.

Espero sea de tu ayuda...


niofis

fuhrer

  • Miembro MUY activo
  • ***
  • Mensajes: 329
  • Nacionalidad: mx
    • Ver Perfil
    • http://admin.busquenoseninternet.com
Re: Ayuda Con Recursividad
« Respuesta #3 en: Sábado 18 de Junio de 2005, 18:08 »
0
Hola que tal.

Veo que ya te dieron varias soluciones para el calculo de la potencia, pero les falto decirte como obtener el MCD, bueno, para esto te recomiendo que utilices el algoritmo de Euclides para el calculo de MCD, este ya es recursivo y lo puedes encontrar fácilmente en la red.

Hasta luego.

Dunadan

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
Re: Ayuda Con Recursividad
« Respuesta #4 en: Domingo 26 de Junio de 2005, 05:36 »
0
Buenas a todos, este tema me viene bien ya que justamente hace poco me puse a ver recursividad.

Tengo una pregunta sobre le programa que hizo Niofis de la potencia, lo probe y funcionó; pero hay algo que no entiendo:

return n*(potencia(n,p-1));

Return por lo que tengo entendido sirve para devolver un valor y finalizar una función, pero lo que no sabia era que podia acumular un valor, como lo haria en este caso; si alguien me verifica este dato le estaría muy agradecido.

Saludos.
"Desde antaño se dice que el espíritu que al demonio se ha vendido no se apresura en dejar la envoltura de la carne, sino que alimenta y enseña al mismo gusano que roe, hasta que desde la corrupción emerge una vida terrible, y las criaturas que con carroña de la tierra se alimentan se multiplican a escondidas para hostigarla, y se hacen monstruosas para infestarlas.  En secreto son excavadas interminables galerías donde debían bastar los poros de la tierra, y unas criaturas que sólo debían arrastrarse han aprendido a caminar"

[size=109]H.P. Lovecraft "El Ceremonial"[/size]

fuhrer

  • Miembro MUY activo
  • ***
  • Mensajes: 329
  • Nacionalidad: mx
    • Ver Perfil
    • http://admin.busquenoseninternet.com
Re: Ayuda Con Recursividad
« Respuesta #5 en: Martes 28 de Junio de 2005, 00:48 »
0
Hola, que tal.

No es que el reurn acumule valores, si te das cuenta, el valor de retorno es el número n multiplicado por el valor de una función, que en este caso es ella misma, pero si lo ves como otra función tal vez podrias ver que es más claro.

El hacer este tipo de operaciones es lo escencial de la recursividad.

Hasta luego.

Dunadan

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
Re: Ayuda Con Recursividad
« Respuesta #6 en: Martes 28 de Junio de 2005, 23:05 »
0
Gracias fuhrer, ahora entendí, pero una cosa más, la función haría n*n*n*..., hasta que se cumpla la condición en ese caso haría return 1.0, pero que ocurriría en ese caso? la "n" que se fue acumulando en el anterior return se multiplica con el 1.0 este para dar el resultado de la potencia?  Disculpen mis preguntas pero no me gusta quedarme con la duda por más boba que sea.

Saludos.
"Desde antaño se dice que el espíritu que al demonio se ha vendido no se apresura en dejar la envoltura de la carne, sino que alimenta y enseña al mismo gusano que roe, hasta que desde la corrupción emerge una vida terrible, y las criaturas que con carroña de la tierra se alimentan se multiplican a escondidas para hostigarla, y se hacen monstruosas para infestarlas.  En secreto son excavadas interminables galerías donde debían bastar los poros de la tierra, y unas criaturas que sólo debían arrastrarse han aprendido a caminar"

[size=109]H.P. Lovecraft "El Ceremonial"[/size]

fuhrer

  • Miembro MUY activo
  • ***
  • Mensajes: 329
  • Nacionalidad: mx
    • Ver Perfil
    • http://admin.busquenoseninternet.com
Re: Ayuda Con Recursividad
« Respuesta #7 en: Miércoles 29 de Junio de 2005, 21:23 »
0
Si, lo que hace esa función es

fuhrer

  • Miembro MUY activo
  • ***
  • Mensajes: 329
  • Nacionalidad: mx
    • Ver Perfil
    • http://admin.busquenoseninternet.com
Re: Ayuda Con Recursividad
« Respuesta #8 en: Miércoles 29 de Junio de 2005, 21:25 »
0
Si, lo que hace esa función es que al final va a hacer n*n*n* . . . *n*n*1, esto es, va a multipicar p veces n, dando como resultado n elevado a la potencia p.

Y no te preocupes por preguntar, eso es bueno y así aprendes mas.

_HEAVY_

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Ayuda Con Recursividad
« Respuesta #9 en: Viernes 15 de Julio de 2005, 18:23 »
0
Aqui esta el del MCD

Código: Text
  1.  
  2. int MCD(int x,int y){
  3.    int r;       // Algoritmo de Euclides
  4.    r=x%y;       // r = residuo( a / b)
  5.    x=y;         // x &#60;--- y
  6.    y=r;         // y &#60;----r
  7.    if (!y)      // el resultado es x (el ultimo valor mientras y &#60;&#62; 0
  8.       return x;
  9.    else
  10.       return MCD(x,y);
  11. }
  12.  

Y para cuando era la tarea, espero q todavia este a tiempo