• Viernes 8 de Noviembre de 2024, 22:55

Autor Tema:  Sucesion Recursividad  (Leído 1763 veces)

Carlota

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Sucesion Recursividad
« en: Sábado 28 de Agosto de 2010, 22:19 »
0
Hola gente!
Estoy programando en C y tengo el siguiente codigo:

Código: C++
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int num_guay(int n);
  5.  
  6. int main(){
  7.     int n, res;
  8.     printf("Introduce un numeron");
  9.     scanf("%i",&n);
  10.    
  11.     res=num_guay(n);
  12.    
  13.     if(res==1) printf("El numero es guayn");
  14.     else printf("El numero NO es guayn");
  15.    
  16.     system("PAUSE");
  17.     return 0;
  18. }
  19.  
  20. //Cabecera: int num_guay(int n);
  21. //Precondicion: n inicializado
  22. //Postcondicion: devuelve 1 ó 0 si un numero es guay o no
  23.  
  24. int num_guay(int n){
  25.     int i;
  26.     i=1;
  27.    
  28.     switch(n){
  29.               case 1: return 1;break;
  30.               case 0: return 0;break;
  31.              
  32.               default: i++;
  33.                        if(i>n) return 0;break;
  34.                        
  35.                        num_guay(n-i);
  36.                        }
  37.                        }
  38.  

El enunciado del problema me pide que dado un numero n, realizar un algoritmo recursivo que escriba por pantalla si ese numero pertenece o no a esta sucesion: 1 + 3(1+2) + 6(1+2+3) + ... (Devolver 1 si fuera asi, y 0 si no lo es)

La parte que tengo mas duda es la del switch, ya que cuando compilo el programa me he dado cuenta de que tan solo llama a la funcion una vez cuando entra en deafult y no se como hacer para que lo haga las veces necesarias...

Si alguien me pudiera ayudar lo agradeceria ^_^

Saludos!

Gared12

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Sucesion Recursividad
« Respuesta #1 en: Martes 31 de Agosto de 2010, 05:59 »
0
No se entiende bien tu enunciado, Podrias escribirlo con ejmplos de entrada y salida por favor

Carlota

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Sucesion Recursividad
« Respuesta #2 en: Martes 31 de Agosto de 2010, 17:42 »
0
Tenemos la siguiente sucesion ---> 1, 3 ( 1+2 ), 6 ( 1+2+3 ), 10 ( 1+2+3+4 ), ...

Por ejemplo:
Si yo introduzco el numero 4 (al no pertenecer a la sucesion) la funcion recursiva me tendra que devolver un 0 y escribir por pantalla "No es un numero guay"

Y si yo introduzco un 6 (que sí pertenece a la sucesion) la funcion recursiva me tendra que devolver un 1 y escribir por pantalla "Es un numero guay"

No se si esto es lo que no explique bien >.<

punteroNULO

  • Miembro activo
  • **
  • Mensajes: 73
    • Ver Perfil
Re: Sucesion Recursividad
« Respuesta #3 en: Jueves 2 de Septiembre de 2010, 21:00 »
0
La idea es ir restandole al número sucesivamente 1, 2, 3, ....

Cada vez que se resta una cifra comprobamos el resultado:
* si es cero: el número cumple la condición (es igual a la suma).
* si es menor que cero: no cumple (no es la suma de los elementos).
* si es mayor que cero: continuamos restando.

Solo hay que modificar la función:
Código: C
  1.  
  2. int num_guay(int n, int cont)
  3. {
  4.                  int aux = n - cont; // realizamos la resta
  5.                  if (n == 0) return 1;
  6.                  else if (n < 0) return 0;
  7.                  else return num_guay(aux, ++cont); // continuamos restando lo que queda por la cifra siguiente.
  8. }
  9.  
  10.  

La primera llamada a la función será con los datos:
Código: C
  1. res=num_guay(n,1);
  2.  
donde n es el número y 1 la primera cifra a descontar.

Carlota

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Sucesion Recursividad
« Respuesta #4 en: Sábado 4 de Septiembre de 2010, 00:48 »
0
Perfecto! O.O
Entendi muy bien la funcion que has mostrado, no tiene mucha dificultad para comprenderlo.
Ademas, repite solo las veces necesarias para poder hallar si es un numero guay o si no lo es.

En serio, te agradezco muchisimo que me hayas resuelto la duda!  :)