elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  recursividad C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: recursividad C  (Leído 9,825 veces)
dabaji

Desconectado Desconectado

Mensajes: 8


Ver Perfil
recursividad C
« en: 12 Julio 2012, 01:31 am »

Hola tengo una duda para hacer estos ejercicios a ver si me ayudan:

1)Desarrolle una función recursiva para calcular la cantidad de veces que se puede dividir
un número entero x (leído desde la terminal) por dos.

2). Desarrolle una función recursiva para convertir un número pasado como parámetro y
que lo convierta a otro con sus dígitos escritos al revés. Ejemplo: f(4532) debe producir
el número 2354. Escriba un programa main() que ingresa un número desde el teclado y
luego use la función para calcular el mismo al revés.


En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: recursividad C
« Respuesta #1 en: 12 Julio 2012, 01:36 am »

¿Qué has intentado? Es para poder ayudarte con tus dudas  :D

Saludos


En línea

dabaji

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: recursividad C
« Respuesta #2 en: 12 Julio 2012, 01:38 am »

en la 2) intente esto:
#include <stdlib.h>
#include <stdio.h>

void funcionRecursiva (int n)
{
    int numero;

    if (numero == '\0') return;

    funcionRecursiva(n+1);


    return;


}


int main (void)

{

    int f,funcion;

    printf ("Ingrese el numero\n");
    printf ("%d", &f);

    funcion=funcionRecursiva (0);


    printf ("El resultado es:%d",funcion);

   return 0;
}

pero falta cosas como para invocar en main...
En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: recursividad C
« Respuesta #3 en: 12 Julio 2012, 01:59 am »

Bueno, empiezo poco a poco:

Si en main() llamas a la función y le vas a asignar un valor a una variable a partir de esta, la función debe devolver algo, no ser void (a parte, en la función pones "return;", a pesar de que no devuelves nada y la función es void).

El número no va a ser nunca un '\0', no estás trabajando con cadenas de caracteres...

Ah, y en main() debes pasarle como parámetros a funcionRecursiva la variable f, no el número 0.

Respecto al algoritmo para invertir el número... Podrías averiguar cuántas cifras tiene el número (en otra función), dividiendo entre 10 el número int hasta que te de 0. Entonces, una vez tengas eso, se lo pasas por parámetros a la función recursiva. Entonces, sabiendo, por ejemplo, que el número 123 tiene 3 cifras, puedes hacer esto:

resultado = (num % 10) * 10^2;
num/10;

Así, de forma recursiva, invertirás el número. Seguramente haya alguna forma más sencilla de explicar, pero es lo que se me ha ocurrido ahora mismo  :( .

Saludos.
En línea

dato000


Desconectado Desconectado

Mensajes: 3.034



Ver Perfil
Re: recursividad C
« Respuesta #4 en: 12 Julio 2012, 16:11 pm »

Dejo lo que DickGumshoe quiso decir con estas correcciones.

Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. void funcionRecursiva (int n)
  5. {
  6.    int numero;
  7.    numero = funcionRecursiva(n+1);
  8.    do{
  9.        resultado = (numero % 10) * 10^2;
  10.        numero/10;
  11.        numero = funcionRecursiva(n+1);
  12.    }while(numero>0);
  13.  
  14.    printf ("El resultado es:%d", numero);
  15.  
  16. }
  17.  
  18.  
  19. int main (void)
  20.  
  21. {
  22.    int f, funcion;
  23.    printf ("Ingrese el numero\n");
  24.    printf ("%d", &f);
  25.    funcion=funcionRecursiva (f);
  26.  
  27.   return 0;
  28. }
  29.  

No lo probe, pero es una idea general, no es la solucion, pero es para que tengas una noción de como va la cosa.


En el primer punto pues no termine de entender, pues si la pregunta es cuantas veces se puede dividir un numero (sea entero o coma flotante) pues se puede hacer infinitamente. Ahora, si se necesta saber cuantas veces se puede dividir siempre y cuando el resultado sea entero, pues si es impar ya no sirve, y si es par, pues debe ser hasta que sea mayor o igual a 1, son cosas que deben tenerse en cuenta, y pues no se cual sea tu caso.
En línea


DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: recursividad C
« Respuesta #5 en: 12 Julio 2012, 18:54 pm »

Dividiendo entre 10 un número entero y sumándole uno al contador hasta que el resultado sea 0 es como puedes contar el número de cifras (ya que en un int solo te coge la parte entera, y por tanto llegará a ser 0).

dato000, tu código tiene algunos errores... Para pedir datos debes usar scanf, no printf, y en:

Código
  1. resultado = (numero % 10) * 10^2;

Donde tienes puesto el 2, es una variable que empieza en el número de cifras y se va restando uno... Lo entenderás mejor cuando deje el código:

Código
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. int num_dividir(int n)
  5. {
  6.    int i=0;
  7.    while(n > 0)
  8.    {
  9.        n /= 10;
  10.        i++;
  11.    }
  12.    return i;
  13. }
  14.  
  15. int funcionRecursiva (int n, int cifras, int resultado)
  16. {
  17.    if(cifras <= 0) return resultado/10;
  18.    else
  19.    {
  20.        resultado += (n % 10) * pow(10,cifras);
  21.        n /= 10;
  22.        cifras--;
  23.        return funcionRecursiva(n, cifras, resultado);
  24.    }
  25. }
  26.  
  27.  
  28.  
  29. int main ()
  30.  
  31. {
  32.    int f, funcion, div, resultado;
  33.    printf ("Ingrese el numero\n");
  34.    scanf ("%d", &f);
  35.    div = num_dividir(f); //Numero de cifras
  36.    resultado = funcionRecursiva(f, div, 0);
  37.    printf("El numero invertido es: %d", resultado);
  38.  
  39.   return 0;
  40. }
  41.  

No lo he probado, pero creo que funciona bien.

Saludos!
En línea

dato000


Desconectado Desconectado

Mensajes: 3.034



Ver Perfil
Re: recursividad C
« Respuesta #6 en: 13 Julio 2012, 02:52 am »


dato000, tu código tiene algunos errores... Para pedir datos debes usar scanf, no printf, y en:


ups, se me paso, como dije no probe, solo vi por encima jajaja

voy a esperar a ver que dice el muchacho que abrio el post si tiene más dudas y comienzo a implementar, hasta entonces.
En línea


Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Recursividad
Java
rjrn 8 10,060 Último mensaje 17 Marzo 2009, 19:33 pm
por weirdtyping
recursividad
Ejercicios
Choclito 0 3,701 Último mensaje 12 Mayo 2009, 04:47 am
por Choclito
Recursividad
Programación C/C++
Abanda_9 4 5,146 Último mensaje 29 Mayo 2010, 04:09 am
por Abanda_9
recursividad en c++
Programación C/C++
krizalid1 2 5,984 Último mensaje 4 Junio 2011, 15:32 pm
por Don Pollo
recursividad
Java
trueno_dp 4 4,897 Último mensaje 16 Junio 2011, 09:20 am
por barbieturico
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines