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
Ir a la versión completa