RECURSION en su estado mas puro para invertir un vector!

Iniciado por Elias Flores, 12 Septiembre 2018, 23:27 PM

0 Miembros y 1 Visitante están viendo este tema.

Elias Flores

Código (cpp) [Seleccionar]
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <string>
#include <ctime>
using namespace std;
void cargar (int arreglo[],int num2,int n);
void mostrar (int arreglo[],int num2,int n);
void invertir (int arreglo[],int a,int b);
void mostrarinversa (int arreglo[],int num2,int n);
int main (){
int n;
cout<<"ingrese la longitud del vector: ";cin>>n;
int arreglo[n];
cargar (arreglo,0,n);
cout<<endl<<endl;
mostrar (arreglo,0,n);
cout<<endl<<endl;
invertir (arreglo,0,n);
cout<<endl<<endl;
mostrarinversa (arreglo,n-n+1,n);
getch();
return 0;
}
void invertir(int arreglo[],int a ,int b){
  int n=b-a+1;
  int aux;
  if (n>1)
     {
     invertir(arreglo,a+1,b-1);
     aux=arreglo[a];
     arreglo[a]=arreglo[b ] ;
     arreglo[ b]=aux ;
      }
}
void mostrarinversa (int arreglo[],int num2,int n){
if (n>0){
mostrarinversa(arreglo,num2+1,n-1);
cout<<arreglo[num2]<<" ";}  
}
void cargar (int arreglo[],int num2,int n){//en el siguiente metodo le pasado el vector y el indice que comienza en cero = num2
if (n>0){   //num2 debe ir aumentando de 1 en 1
srand(time(0));   //el srand sirve para sincronizar el rand con el reloj del pc
cargar(arreglo,num2+1,n-1);   //llamamos a la misma funcion cargar pero menos el ultimo dato n-1
arreglo[num2]=1+rand()% 10;}
}
void mostrar (int arreglo[],int num2,int n){
if (n>0){
mostrar(arreglo,num2+1,n-1);
cout<<arreglo[num2]<<" ";}
}


hola necesito ayuda en esto tengo que llevarlo a una matriz pero todo tiene que ser recurisvo desde cargar la matriz hasta mostrar la matriz solo se puede usar "If" HELP aun son muy nuevo en esto de la recursion




Mod: Es obligatorio el uso de etiquetas GeSHi para poner código.

Mr.Moonlight

#1
En la funcion invertir habia algunas asignaciones raras :silbar:



void invertir(int arreglo[],int a ,int b){
   int n=b-a+1;
   int aux;
   if (n>1)
       {
      invertir(arreglo,a+1,b-1);
      aux=arreglo[a];
      arreglo[a]=arreglo[b];
      arreglo[b]=aux;
       }
}



arreglo es un array , no puedes asignar un array entero a una posición del mismo  :xD
de esta misma manera no puedes asignar un dato de una posición a todo el array.. no se si me explico

Elias Flores

estoy en un elemento dentro del vector y lo estoy intercambiando a=inicio b= fin luego del intercambio b=inico a=fin

Mr.Moonlight

#3
eso es lo que hace el codigo que te puse ahi , ese si funciona ,el que tu pusiste no compilaba

Elias Flores

O_O gracias camarada seguro debi pegarlo mal recien me di cuenta  gracias por el aporte :D

Mr.Moonlight

#5
El problemas es que debeis utilizar las etiquetas para insertar codigo , puesto que sino, puede dar lugar a malentendidos como este..

fijandome más detenidamente en tu primer mensaje puedo ver que

arreglo[a]= arreglo[b]


al no usar las etiquetas ha interpretado [ b ] como si lo estuvieras remarcando en negrita .. por tanto te pido que modifiques el primer mensaje y utilices dichas etiquetas por favor. :(

A la hora de trasladar esto a una matriz..¿supongo que conoceras la forma de invertir una matriz, no?
Una matriz inversa es completamente distinto a invertir un vector no se si me explico

Elias Flores

pues en matriz recursiva estoy cero...... por eso pido ayuda al foro si alguien podria hacer algun ejemplo o modificar mi codigo para tener una matriz caracol recursiva, solo quiero saber el metodo para llenar una matriz recursiva de hay me guio en la logica para llenarla al estilo caracol! HELP FORO

Beginner Web

#7
Código (cpp) [Seleccionar]
int suma(arreglo a, int i, int j)
{
if(i==0 && j==0)
return a[i][j];
else
if(i>-1)
if(j>=-1)
return a[i][j]+suma(a,i,j-1);
else
return a[i][j]+suma(a,i-1,j+COLUMNAS-1);
}





Código (cpp) [Seleccionar]
void mostrar(arreglo a, int n)
{
if(n>=0)
cout << a[n] << " ";
mostrar(a,n-1);
}



Código (cpp) [Seleccionar]
void como_la_realidad(short vida)
{
if(vida<=1){
cout << "Entrando en el sueño";
}
else{
como_la_realidad(vida-1);
cout << " del sueño";
}
}




Mod: No hacer triple post. Usa el botón "Modificar".
7w7

Elias Flores

#8
Código (cpp) [Seleccionar]
   int suma(arreglo a, int i, int j)
   {
    if(i==0 && j==0)
    return a[i][j];
    else
    if(i>-1)
    if(j>=-1)
    return a[i][j]+suma(a,i,j-1);
    else
    return a[i][j]+suma(a,i-1,j+COLUMNAS-1);
   }

la variable "COLUMNAS" cuando lo declaras y cual es su valor ? O_O



Mod: Obligatorio el uso de etiquetas GeSHi para códigos.

MAFUS

Pon todo el código dentro de las etiquetas que se generan cuándo le das al desplegable 'Código GeSHi'.