Foros del Web » Programación para mayores de 30 ;) » C/C++ »

piramide n capas recursiva

Estas en el tema de piramide n capas recursiva en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 23/04/2011, 02:43
 
Fecha de Ingreso: abril-2011
Mensajes: 3
Antigüedad: 13 años
Puntos: 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.
  #2 (permalink)  
Antiguo 23/04/2011, 04:14
 
Fecha de Ingreso: abril-2011
Mensajes: 88
Antigüedad: 13 años
Puntos: 24
Respuesta: piramide n capas recursiva

Con recursión lo que te piden es que la función se llame asi misma por que tendrías que hacer algo como esto:
Código C++:
Ver original
  1. int rec(int n){
  2.     if (n<1)return 0;
  3.     else if (n==1)return 1;
  4.     else return 2*rec(n-1)+1;
  5. };

El número en una posición determinada es 2*(número anterior) +1.
__________________
Foros Desarrollo de Juegos

Última edición por ssaammuu; 23/04/2011 a las 04:19
  #3 (permalink)  
Antiguo 25/04/2011, 10:03
 
Fecha de Ingreso: abril-2011
Mensajes: 3
Antigüedad: 13 años
Puntos: 0
Respuesta: piramide n capas recursiva

Muchas gracias ssaammuu!!,
Me queda bastante mas claro, pero no se como hacer que imprima el resultado:
Tengo que poner cin>>n; para que el usuario introduzca el numero de capas, que será al mismo tiempo el número de veces que la funcion se llama a si misma, y despues cout<<algo; para que imprima el resultado, no se que tengo que hacer, he probado de todo, me estoy empezando a volver loco.
Esto es lo último que he escrito siguiendo tu consejo y añadiendole cin para introducir n y cout para imprimir el resultado y me imprime unas cifras "rarísimas" que no se donde se las saca.
Muchas gracias de nuevo!!
#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;
}
system("pause");
}
int main(int n) {
cin>>n;
rec(n);
cout<<rec;
system("pause");
}
  #4 (permalink)  
Antiguo 25/04/2011, 12:15
 
Fecha de Ingreso: abril-2011
Mensajes: 88
Antigüedad: 13 años
Puntos: 24
Respuesta: piramide n capas recursiva

El system("pause") que has puesto dentro de la función quítalo ya que la función siempre termina anted de llegar allí así que está ahí de decoración.

Código:
int main(int n) {
ehhh?

Código C++:
Ver original
  1. int main(){
  2.     int num; //declarar variable
  3.     cout<<"Introduce el numero de capas: ";
  4.     cin>>num; //guardar el numero en 'num'
  5.     cout<<"Resultado: "<<rec(num);
  6.     return 0;
  7. }
__________________
Foros Desarrollo de Juegos
  #5 (permalink)  
Antiguo 25/04/2011, 13:48
 
Fecha de Ingreso: abril-2011
Mensajes: 3
Antigüedad: 13 años
Puntos: 0
Respuesta: piramide n capas recursiva

Un millón de gracias!!!!
ahora si que funciona 100%!!!

Etiquetas: recursividad
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:35.