elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Dudas de recursividad
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Dudas de recursividad  (Leído 2,734 veces)
Denok

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Dudas de recursividad
« en: 16 Diciembre 2011, 01:16 am »

Hola, estoy aprendiendo a programar usando recursividad y no acabo de entenderlo del todo.

Os pongo un ejemplo y os presento mis dudas:
Código:
#include <iostream>
#include <string>
using namespace std;

void invertir(){
string tmp;
if(cin >> tmp){
invertir();
cout << tmp << endl;
}
}

int main(){
invertir();
}

Este código lo que hace es invertir palabras. Por ejemplo, yo le entrego tres nombres: Jaime, Ramon, Pablo y me devuelve Pablo, Ramon, Jaime.
No entiendo como lo hace, quiero decir, la función entra en un bucle mientras le estén introduciendo datos, pero es que cuando esta dentro de el bucle vuelve a llamarse a si misma, y entonces nunca llegaría al cout << tmp << endl; no? Pues cuando se acabe de introducir datos no entrara al bucle i no passara por el cout.

Ademas, como la variable tmp puede guardar tantos nombres ? No se deberían machacar, quiero decir al poner Jaime i en la siguiente vez Ramon, no se machaca la variable ? Porque sino es que escribe el cout cada vez que pasa por el bucle(que es lo que supongo que pasa) pero no se como lo hace entonces.

No se si me he explicado bien, espero que me podáis ayudar.

En el caso del factorial recursivo me pasa mas o menos lo mismo, no acabo de entender como se guardan los datos, si se deberian machar, etc.

Muchísimas gracias!!

Adiós!


En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Dudas de recursividad
« Respuesta #1 en: 16 Diciembre 2011, 03:20 am »

la recursividad no es muy aconsejable porque se necesita mucho recursos de la pila ya que cada parametro lo inserta
por cada "paso" que hace por la funcion, lo que quieras hacer trata de hacerlo con bucles.
este codigo extraido del libro que aprendi C++ es un ejemplo acerca de las permutaciones:
Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. /* Prototipo de función */
  5. void Permutaciones(char *, int l=0);
  6.  
  7. int main(int argc, char *argv[]) {
  8.   char palabra[] = "ABCDE";
  9.  
  10.   Permutaciones(palabra);
  11.  
  12.   cin.get();
  13.   return 0;
  14. }
  15.  
  16. void Permutaciones(char * cad, int l) {
  17.   char c;    /* variable auxiliar para intercambio */
  18.   int i, j;  /* variables para bucles */
  19.   int n = strlen(cad);
  20.  
  21.   for(i = 0; i < n-l; i++) {
  22.      if(n-l > 2) Permutaciones(cad, l+1);
  23.      else cout << cad << ", ";
  24.      /* Intercambio de posiciones */
  25.      c = cad[l];
  26.      cad[l] = cad[l+i+1];
  27.      cad[l+i+1] = c;
  28.      if(l+i == n-1) {
  29.         for(j = l; j < n; j++) cad[j] = cad[j+1];
  30.         cad[n] = 0;
  31.      }
  32.   }
  33. }



En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Recursividad
Java
rjrn 8 10,079 Último mensaje 17 Marzo 2009, 19:33 pm
por weirdtyping
recursividad
Ejercicios
Choclito 0 3,721 Último mensaje 12 Mayo 2009, 04:47 am
por Choclito
Recursividad
Programación C/C++
Abanda_9 4 5,158 Último mensaje 29 Mayo 2010, 04:09 am
por Abanda_9
recursividad en c++
Programación C/C++
krizalid1 2 5,994 Último mensaje 4 Junio 2011, 15:32 pm
por Don Pollo
recursividad
Java
trueno_dp 4 4,904 Último mensaje 16 Junio 2011, 09:20 am
por barbieturico
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines