Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema con recursividad

Estas en el tema de Problema con recursividad en el foro de C/C++ en Foros del Web. Hola colegas!!! Necesitaria ayuda con un problema de recursion, tengo que informar la cantidad de veces que se repite una cifra en un numero, ya ...
  #1 (permalink)  
Antiguo 22/05/2011, 14:35
 
Fecha de Ingreso: mayo-2011
Ubicación: Mina clavero
Mensajes: 6
Antigüedad: 12 años, 11 meses
Puntos: 0
Pregunta Problema con recursividad

Hola colegas!!! Necesitaria ayuda con un problema de recursion, tengo que informar la cantidad de veces que se repite una cifra en un numero, ya hice varios intentos pero no encuentro la solucion a esa funcion... alguien me podria dar una mano u orientar un poco??? se los agradeceria enormemente! :)
  #2 (permalink)  
Antiguo 22/05/2011, 16:32
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Problema con recursividad

Puedes mostrar tus varios intentos asi te ayudamos?
  #3 (permalink)  
Antiguo 22/05/2011, 16:53
 
Fecha de Ingreso: mayo-2011
Ubicación: Mina clavero
Mensajes: 6
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: Problema con recursividad

Primero que todo gracias por contestar! :) aca hay un intento, pero casi que no tiene logica, el caso base creo que esta bien (creo) :/

#include <stdio.h>

int ocurrencia (int num3, int num4)
{
/*Inicio de declaracion de variables*/
int minimo;
/*Fin de declaracion de variables*/

minimo=num3%10;

if (num3<10)

return 0;
else

return ocurrencia (((num3-minimo)/10,num4)*1);



}



main ()
{
/*Inicio de declaracion de variables*/
int num1,num2;
/*Fin de declaracion de variables*/

printf ("Ingrese un numero y una posicion separados por coma: " );
scanf ("%d,%d", &num1, &num2);
printf ("El numero de ocurrencias es: %d", ocurrencia (num1,num2));
fflush (stdin);
getchar ();






}
  #4 (permalink)  
Antiguo 22/05/2011, 17:04
 
Fecha de Ingreso: mayo-2011
Ubicación: Mina clavero
Mensajes: 6
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: Problema con recursividad

int ocurrencia (int num3, int num4)
{
/*Inicio de declaracion de variables*/
int minimo,cont;
/*Fin de declaracion de variables*/

minimo=num3%10;

/*num4 es el digito al cual se le quiere averiguar las ocurrencias*/

if ((num3<10) && (minimo==num4))
{
return 1;
}
else
{
if ((num3<10) && (minimo!=num4))
{
return 0;
}
else
{
if (minimo==num4)
{
return ocurrencia ((num3-minimo)/10)+1);
}
else
{
return ocurrencia ((num3-minimo)/10);
}

}
}



main ()
{
/*Inicio de declaracion de variables*/
int num1,num2;
/*Fin de declaracion de variables*/

printf ("Ingrese un numero y una posicion separados por coma: " );
scanf ("%d,%d", &num1, &num2);
printf ("El numero de ocurrencias es: %d", ocurrencia (num1,num2));
fflush (stdin);
getchar ();






}
Aca hay otro , pero el compilador me tira errores de argumentos (dice que hay demasiados )
  #5 (permalink)  
Antiguo 22/05/2011, 17:12
 
Fecha de Ingreso: mayo-2011
Ubicación: Mina clavero
Mensajes: 6
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: Problema con recursividad

La teoria de recursion la entiendo bien, el problema es aplicarlo en problemas, y no entiendo bien como sacar la formula matematica para usar en la funcion recursiva
  #6 (permalink)  
Antiguo 22/05/2011, 19:18
_Lx
 
Fecha de Ingreso: mayo-2011
Mensajes: 17
Antigüedad: 12 años, 11 meses
Puntos: 11
Busqueda Respuesta: Problema con recursividad


A ver ....

Podrías usar un vector de 10 elementos e inicializas todos los elementos a 0:
Código C:
Ver original
  1. ...
  2.  
  3. int Nums[10] = {0};
  4.  
  5. ...
Para qué?

Ahora, vamos sacando dígito por dígito del número (con bucles) y vamos haciendo esto:
Código C:
Ver original
  1. ...
  2. while(...){
  3.    ... // Código para sacar dígito
  4.  
  5.    Nums[digito]++;
  6. }
  7.  ...
Finalmente, mostramos cada elemento de Nums con la condición que sea mayor que 0:
Código C:
Ver original
  1. ...
  2.  
  3. for( int i = 0; i < 10; i++){
  4.  
  5.    if( Nums[i] > 0)
  6.  
  7.       printf("\nEl digito %d se ha repetido %d veces.", i, Nums[i]);
  8. }
  9.  
  10. ...

Si te das cuenta te puse casi todo el código que necesitas sólo te falta hacer el bucle que saque dígito por dígito.
  #7 (permalink)  
Antiguo 23/05/2011, 10:12
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Problema con recursividad

Fijate si te sirve y si lo entendes. No lo pude probar pero creo que funciona.

int ocurrencia (int numero, int digito) {
int d;
if (numero<10) {
if (numero == digito) return 1;
else return 0;
}else{

d = numero % 10; // Calculo el residuo de la division. Al dividir por diez el residuo siempre es el primer digito.
if (d == digito) return (1 + ocurrencia (numero / 10,digito);
else return ocurrencia (numero / 10, digito);
}
}
  #8 (permalink)  
Antiguo 23/05/2011, 14:54
 
Fecha de Ingreso: mayo-2011
Ubicación: Mina clavero
Mensajes: 6
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: Problema con recursividad

Ya esta! aparentemente el error de argumentos que tiraba el compilador indicaba que me faltaba pasar un parametro de forma recursiva, (yo solo le pasaba 1), de todos modos gracias a los 2 por la ayuda, que anden bien ! :)

Etiquetas: recursividad
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:05.