Autor
|
Tema: recursividad C (Leído 9,841 veces)
|
dabaji
Desconectado
Mensajes: 8
|
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
|
¿Qué has intentado? Es para poder ayudarte con tus dudas Saludos
|
|
|
En línea
|
|
|
|
dabaji
Desconectado
Mensajes: 8
|
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
|
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
Mensajes: 3.034
|
Dejo lo que DickGumshoe quiso decir con estas correcciones. #include <stdlib.h> #include <stdio.h> void funcionRecursiva (int n) { int numero; numero = funcionRecursiva(n+1); do{ resultado = (numero % 10) * 10^2; numero/10; numero = funcionRecursiva(n+1); }while(numero>0); printf ("El resultado es:%d", numero ); } int main (void) { int f, funcion; printf ("Ingrese el numero\n"); funcion=funcionRecursiva (f); return 0; }
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
|
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: 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: #include <stdio.h> #include <math.h> int num_dividir(int n) { int i=0; while(n > 0) { n /= 10; i++; } return i; } int funcionRecursiva (int n, int cifras, int resultado) { if(cifras <= 0) return resultado/10; else { resultado += (n % 10) * pow(10,cifras ); n /= 10; cifras--; return funcionRecursiva(n, cifras, resultado); } } int main () { int f , funcion , div, resultado ; printf ("Ingrese el numero\n"); div = num_dividir (f ); //Numero de cifras resultado = funcionRecursiva (f , div, 0); printf("El numero invertido es: %d", resultado ); return 0; }
No lo he probado, pero creo que funciona bien. Saludos!
|
|
|
En línea
|
|
|
|
dato000
Desconectado
Mensajes: 3.034
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Recursividad
Java
|
rjrn
|
8
|
10,080
|
17 Marzo 2009, 19:33 pm
por weirdtyping
|
|
|
recursividad
Ejercicios
|
Choclito
|
0
|
3,721
|
12 Mayo 2009, 04:47 am
por Choclito
|
|
|
Recursividad
Programación C/C++
|
Abanda_9
|
4
|
5,159
|
29 Mayo 2010, 04:09 am
por Abanda_9
|
|
|
recursividad en c++
Programación C/C++
|
krizalid1
|
2
|
5,998
|
4 Junio 2011, 15:32 pm
por Don Pollo
|
|
|
recursividad
Java
|
trueno_dp
|
4
|
4,907
|
16 Junio 2011, 09:20 am
por barbieturico
|
|