Programación General > C/C++

 Sucesion Recursividad

(1/1)

Carlota:
Hola gente!
Estoy programando en C y tengo el siguiente codigo:


--- Código: C++ ---#include <stdio.h>#include <stdlib.h> int num_guay(int n); int main(){    int n, res;    printf("Introduce un numeron");    scanf("%i",&n);        res=num_guay(n);        if(res==1) printf("El numero es guayn");    else printf("El numero NO es guayn");        system("PAUSE");    return 0;} //Cabecera: int num_guay(int n);//Precondicion: n inicializado//Postcondicion: devuelve 1 ó 0 si un numero es guay o no int num_guay(int n){    int i;    i=1;        switch(n){              case 1: return 1;break;              case 0: return 0;break;                            default: i++;                       if(i>n) return 0;break;                                              num_guay(n-i);                       }                       } 
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:
No se entiende bien tu enunciado, Podrias escribirlo con ejmplos de entrada y salida por favor

Carlota:
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:
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 --- int num_guay(int n, int cont){                 int aux = n - cont; // realizamos la resta                 if (n == 0) return 1;                  else if (n < 0) return 0;                 else return num_guay(aux, ++cont); // continuamos restando lo que queda por la cifra siguiente.}  
La primera llamada a la función será con los datos:

--- Código: C ---res=num_guay(n,1); donde n es el número y 1 la primera cifra a descontar.

Carlota:
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!  :)

Navegación

[0] Índice de Mensajes

Ir a la versión completa