• Miércoles 20 de Noviembre de 2024, 06:37

Autor Tema:  piramide n capas recursividad  (Leído 2165 veces)

davinci300

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
piramide n capas recursividad
« en: Lunes 25 de Abril de 2011, 17:42 »
0
piramide n capas recursiva

--------------------------------------------------------------------------------
Hola, me llamo David y estudio primero de Ingeniería Informática en la U.M.
Me han puesto un ejercicio de recursividad con c++ que no me entra ni con calzador.
Me piden que haga un programa que devuelva la cantidad de ladrillos en función del número de capas de la pirámide,me explico, es una sucesión en la que cada cifra se duplíca y se incrementa en uno:
1, 3, 7, 15, 31, 63...n.
Con esto tengo que si introduzco 5 (capas), retorne 31(ladrillos).
Como ya he dicho es una sucesión y hacerlo con iteración es muy sencillo, solo hay que introducir dos variables(n y r por ejemplo) y poner como condicion el termino general de la sucesion, que en este caso seria r=2^n-1. es decir:

int main(int n, int r=1){
cout<< "introduzca el numero de capas de la piramide";
cin>>n;
for (r; r<=2^n-1; r++);
if (r=2^n-1){
cout<<r;
}
Ya lo he probado y funciona, pero no es lo que me piden, me lo piden de forma recursiva y no se como hacerlo.
He mirado ejemplos de sucesiones con recursividad, pero ninguna se parece a esta.
Gracias de antemano.

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: piramide n capas recursividad
« Respuesta #1 en: Lunes 25 de Abril de 2011, 20:09 »
0
No lo entiendes por que piensas que es complicado, pero en realidad es extremadamente simple: Sólo escribe lo que está en el enunciado:

Código: C++
  1.  
  2. unsigned int cantidadDeLadrillos(unsigned int n)
  3. {
  4.     if (n <=1) return n;
  5.     return cantidadDeLadrillos(n - 1) * 2 + 1;
  6. }
  7.  
  8.  

davinci300

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: piramide n capas recursividad
« Respuesta #2 en: Lunes 25 de Abril de 2011, 21:55 »
0
Muchas gracias!!
Me ha sido de gran ayuda para entenderlo, me estaba volviendo loco, al final lo he hecho asi:
#include <iostream>
 using namespace std;

 
int rec(int n){
   

 if (n<1){
    return 0;
 }    else{
    if (n==1){
       return 1;
    }    else
       return 2*rec(n-1)+1;
 }

 }

   int main(){    
      int num; //declarar variable    
   cout<<"Introduce el numero de capas: ";    
   cin>>num; //guardar el numero en 'num'    
   cout<<"Resultado: "<<rec(num);
   cout<<endl;
   system("pause");
   return 0;
   
   }

Esto ya funciona, ahora lo que no entiendo es la segunda parte del ejercicio:
Escribe una función recursiva final con el mismo comportamiento que la función recursiva
del ejercicio anterior.
PISTAS: Recuerda que necesitarás dos funciones, y una de las dos funciones deberá tener un
parámetro (e.g. llamado “acum”) que acumule el resultado.
Recursiva final???? en el libro no sale nada de eso.
Lo que ya he hecho no es recursiva final??