You are on page 1of 26

U. A. G. R.

M
UNIVERSIDAD AUTONOMA GABRIEL
RENE MORENO
Facultad Ciencias de la computacin
Carrera de Sistemas
Semestre I/2014
Apuntes 2 : Recursividad.
Ing. Mary Lpez N.
Apuntes Recur pgina 1
Fundamentos Tericos 1.
Ejemplos step by step 2.
Ejercicios Resueltos 3.
BIBLIOGRAFIA
Programacin en C++ con C++Builder. 1.
Angel A. Zeitoune y Ricardo A. Rettore. 2005
Aprenda C++ Como si estuviera en primero. 2.
Garca, Rodrguez,Sarriegui y Brazales
Fundamentos de Algoritmia. 3.
Brassard Bratley
Programacin en C++ como si estuviera en primero 1.
http://mat21.etsii.upm.es/ayudainf/aprendainf/Cpp/
manualcpp.pdf
WEBGRAFIA
ndice
Apuntes Recur pgina 2
1. Recursividad
Comienza el del medio diciendo somos los de mi derecha mas los de mi izquierda y yo a.
Luego los de la derecha dice somos los de mi izquierda mas los de mi derecha y yo b.
As hasta que el ultimo queda solo y dice solo soy yo c.
Cuantos Somos dividindose hasta que quedan grupos de 1 1.
Comienzan a devolver 1 + 1 y yo somos 3 hasta llegar al primero para tener el 2.
Total de alumnos del grupo
INICIAR haciendo el ejercicio de grupo que se divide en 2 partes y no sabemos cuantos somos en el
grupo hoy.
http://www.grycap.upv.es/gmolto/prg.php
Ejemplo 1 del factorial paso a paso ->
recursivos.
Comprender el funcionamiento de la pila de activacin durante la ejecucin del algoritmo
recursivo

Entender el algoritmo recursivo de calculo del factorial


-> Factorial de un numero
Analizar la gestin de la pila de recursin ante mtodos con recursin Lineal no final.
Anlisis de Caso base --> Soluciona sin llamarse a si mismo. No tiene llamada recursiva.
Con este es posible que el algoritmo sea FINITO.

Anlisis del caso general --> Solucin de un problema en trminos de un problema mas
pequeo. Llama a si mismo.

Ecuacin de recurrencia.
Plantear el perfil a partir del anlisis en funcin a un caso general y otro base 1.
Disear el algoritmo recursivo de calculo del factorial 2.
Parmetros de entrada
Parmetros de salida
int fac=factorial(num) --> donde num>=0
a. Perfil del mtodo
Caso Base
Caso General
factorial(num)
1 num =0
num*factorial(num-1) num>0
b. Anlisis de casos
if () //caso base
else //Caso General
c. Transcripcin a c++
Validacin del algoritmo 3.
//int res=1;
if(nro==0){
return 1;
}else{
//res= nro*factorial(nro-1);
return nro*factorial(nro-1);
}
int factorial(int nro){
Objetivo: Comprender el procedimiento para el anlisis y diseo de algoritmos
Fundamentos Tericos 1.
Apuntes Recur pgina 3
}
//return res;
}
Conclusion 4.
1. Se ha creado el perfil del algoritmo recursivo
2. Anlisis de casos
3. Transcripcin a c++
4. Validacin.
Seguir paso a paso con las cajas -
Esta sirve para ver que se guarda (direccin de memoria + valor del parmetros) -
Aqu se refleja lo que pasa en cada RETURN -
Comienza desde el caso base el des apilado. -
Mostrar la pila que se forma por cada llamada recursiva -
3. Ejemplo de serie Fibonacci paso a paso ( Recursin Mltiple 2 llamas recursivas)
Comprender el funcionamiento de la pila de activacin durante la ejecucin del algoritmo
recursivo
-
Entender el algoritmo recursivo de calculo del Mismo termino de la serie de Fibonacci -
Analizar la gestin de la pila de recursin ante mtodo con recursin mltiple que generan un
rbol de llamas recursivas.
-
Analysis 1.
Objetivo:
Fib(4)= 1 1 2 3 5
int Fib(int n){
if (n<2) return 1;
else return Fib(n-1)+Fib(n-2);
rbol de llamadas recursivas. parte de la raz fib(4) a.
}
n=4
retur 3+2
fi(3)
n=3
retur ?
...
fib(2)
n=2
return 1+1

if(1) fib (0)
return 1 return 1
El primer registro de activacin en crear ES EL ULTMO en terminar . Se tubo q calcular
los dems para encontrar su resultado.
-
Enumerar los registros de activacin para entender como acaba cada llamada recursiva. a.
Apuntes Recur pgina 4
Modelo 1 : Siguiendo un algoritmo recursivo Simple 1.
Modelo 2: Siguiendo un algoritmo recursivo mltiple 2.
Modelo 3: Siguiendo un algoritmo con mas de un caso base 3.
Modelo 4: Siguiendo un algoritmo Numrico 4.
Modelo 5: Siguiendo un algoritmo Numrico 5.
Ejemplos step by step
Apuntes Recur pgina 5
Algoritmo del factorial de un numero entero positivo
Comprender el procedimiento de mtodos recursivos 1.
Especificar los casos de anlisis de algoritmos recursivos: Caso base y Caso General 2.
Conocer la validacin y terminacin de un algoritmo recursivo 3.
Analizar el algoritmo recursivo del calculo del factorial 4.
Objetivo:
Anlisis del Algoritmo 1.
Para calcular el factorial de 4
4! = 4 * 3! = 24
3! = 3 * 2! = 6
2! = 2 * 1! = 2
1! = 1 * 0! = 1
0! = 1
Tipo: Funcin o Proceso i.
Tipos de datos que entran 1)
Tipo de dato que retorna si es Funcin. 2)
Parmetros ii.
Perfil del mtodo: Identificar a.
Int num = Factorial ( int numero)
0! = 1 --> Este es el caso base 1)
Caso Base : El algoritmo no se llama a si mismo. Permite que el algoritmo termine
en algn momento
i.
Caso General : El mtodo se llama a si mismo ii.

Factorial (n) {
1 n=0 ;
n * factorial (n-1) n>0
Anlisis de casos b.
Codificacin en C++ c.
IF (pregunta por el caso base) {
//Caso Base
} else {
// Paso Recursivo
}
int factorial(int nro){
if(nro==0){
return 1;
}else{
//int res= nro*factorial(nro-1);
//return res;
Diseo del Algoritmo 2.
Metodologa:
Modelo 1 : Siguiendo un algoritmo recursivo Simple
viernes, 28 de marzo de 2014
16:51
Apuntes Recur pgina 6
//return res;
return nro*factorial(nro-1);
}
}
Validacin del algoritmo : Observar si termina y resuelve el problema d.
N es 3
FACTORIAL 3* FACTORIAL (2)
Retorno 6
N es 2
FACTORIAL 2* FACTORIAL (1)
Retorno 2
N es 1
FACTORIAL 1* FACTORIAL (0)
Retorno 1
N es 0
FACTORIAL 1
Retorno 1
FACT FACTORIAL (3)
Ciclo del Factorial Recursivo
Secuenciacin en clase:
Mostrar la pila que se forma por cada llamada recursiva. Esta sirve para ver que ah se guarda
(direccin de memoria + valor del parmetros)
1.
Aqu se refleja lo que pasa en cada RETURN 2.
Comienza desde el caso base el des Apilado. 3.
Apuntes Recur pgina 7
Algoritmo para encontrar el Nsimo termino de la serie de Fibonacci
Comprender el funcionamiento de la pila de activacin durante la ejecucin del
algoritmo recursivo
1.
Entender el algoritmo recursivo de calculo del Nsimo termino de la serie de
Fibonacci
2.
Analizar la gestin de la pila de recursin ante mtodos con recursin mltiple
que generan un rbol de llamas recursiva.
3.
Objetivo:
Metodologa:
Anlisis del Algoritmo 1.
Para calcular el Fibonacci de 5
1 1 2 3 5
rbol de llamadas recursivas. parte de la raz
f5
f3 f4
f1 f2
f0 f1
f2
f0 f1
f3
f1 f2
f0 f1
Tipo: Funcin o Proceso i.
Tipos de datos que entran 1)
Tipo de dato que retorna si es Funcin. 2)
Parmetros ii.
Perfil del mtodo: Identificar a.
Int num = Fibonacci ( int numero)
Fibonacci (0) = 1 --> Este es el caso base 1)
Fibonacci (1) = 1 --> Este es el caso base 2)
Caso Base : El algoritmo no se llama a si mismo. Permite que el algoritmo
termine en algn momento
i.
Caso General : El mtodo se llama a si mismo ii.
Fibonacci (n) {
1 n<2 ;
Fibonacci(n-1) + Fibonacci (n-2) n>=2
Anlisis de casos b.
Codificacin en C++ c.
Diseo del Algoritmo 2.
Modelo 2: Siguiendo un algoritmo recursivo mltiple
viernes, 28 de marzo de 2014
16:51
Apuntes Recur pgina 8
Codificacin en C++ c.
IF (pregunta por el caso base) {
//Caso Base
} else {
// Paso Recursivo
}
int Fibonacci(int n){
if (n<2) return 1;
else return Fibonacci(n-1)+Fibonacci(n-2);
}
Validacin del algoritmo : Observar si termina y resuelve el problema d.
3.
4.
Enumerar los registros de activacin para entender como acaba cada llamada
recursiva.

El primer registro de activacin en crearse ES EL ULTMO en terminar


Secuenciacin en clase:
Apuntes Recur pgina 9
El primer registro de activacin en crearse ES EL ULTMO en terminar
Se tubo q calcular los dems para encontrar su resultado.
Apuntes Recur pgina 10
Algoritmo de la potencia de un numero entero positivo
Comprender el procedimiento de mtodos recursivos 1.
Especificar los casos de anlisis de algoritmos recursivos: Caso base y Caso General 2.
Conocer la validacin y terminacin de un algoritmo recursivo 3.
Analizar el algoritmo recursivo del calculo de la potencia de un numero 4.
Objetivo:
Anlisis del Algoritmo 1.
3^0 = 1
0^0=1
1^1 = 1
555551111^1 = 555551111
0^1000=0
3^4 = 3 * 3 * 3 * 3 = 81 --> Multiplicar pos si mismo 4 veces
Tipo: Funcin o Proceso i.
Tipos de datos que entran 1)
Tipo de dato que retorna si es Funcin. 2)
Parmetros ii.
Perfil del mtodo: Identificar a.
Int num = Potencia ( int numero, int pot)
x^0 = 1 --> Este es el caso base 1)
Caso Base : El algoritmo no se llama a si mismo. Permite que el algoritmo termine
en algn momento
i.
Caso General : El mtodo se llama a si mismo ii.

Potencia (n,p) {
1 pot=0 ;
n * Potencia (n,pot-1) pot>0 ;
Anlisis de casos b.
Codificacin en C++ c.
IF (pregunta por el caso base) {
//Caso Base
} else {
// Paso Recursivo
}
unsigned int Potencia(int num,int pot){
Diseo del Algoritmo 2.
Metodologa:
Modelo 3: Siguiendo un algoritmo con mas de un caso base
viernes, 28 de marzo de 2014
16:51
Apuntes Recur pgina 11
unsigned int Potencia(int num,int pot){
return 1;
if(pot ==0 ){
if (pot ==1)
return num;
else
if(num == 0)
return 0;
else return num * Potencia(num,pot-1);
}else{
}
}
Validacin del algoritmo : Observar si termina y resuelve el problema d.
Graficar la pila de registros de activacion para el algorimo
Num=2
Pot=3
Num * Potencia(num,pot-1)
Num=2
Pot=2
Num * Potencia(num,pot-1)
Num=2
Pot=1
Num * Potencia(num,pot-1)
Paso1
Paso2
Paso3
Retorna 2
Paso4
Retorna 4
Paso5
Retorna 8
8
Secuenciacin en clase:
Mostrar la pila que se forma por cada llamada recursiva. Esta sirve para ver que ah se guarda
(direccin de memoria + valor del parmetros)
1.
Aqu se refleja lo que pasa en cada RETURN 2.
Comienza desde el caso base el des Apilado. 3.
Apuntes Recur pgina 12
Algoritmo para obtener contar los digitos de un numero en base 10
Comprender el procedimiento de mtodos recursivos 1.
Especificar los casos de anlisis de algoritmos recursivos: Caso base y Caso General 2.
Conocer la validacin y terminacin de un algoritmo recursivo 3.
Analizar el algoritmo recursivo para obtener el binario de un numero en base 10 4.
Objetivo:
Anlisis del Algoritmo 1.
501 => Cuantos digitos ?
501 / 10 =50
50 / 10 =5
5 / 10 =0
Se dividio entre 10 3 veces
Luego tiene 3 digitos.
Tipo: Funcin o Proceso i.
Tipos de datos que entran 1)
Tipo de dato que retorna si es Funcin. 2)
Parmetros ii.
Perfil del mtodo: Identificar a.
Unsigned Int dig = CuentaDig (unsigned int num)
num < 10 --> Este es el caso base , tiene 1 digito 1)
Caso Base : El algoritmo no se llama a si mismo. Permite que el
algoritmo termine en algn momento
i.
Caso General : El mtodo se llama a si mismo ii.

CuentaDig (num) {
1 num<10 ;
CuentaDig (num/10) + 1 num>=10 ;
Anlisis de casos b.
Codificacin en C++ c.
IF (pregunta por el caso base) {
//Caso Base
} else {
// Paso Recursivo
}
int CuentaDig(int num){
return 1;
if (num<10) {
Diseo del Algoritmo 2.
Metodologa:
Modelo 4: Siguiendo un algoritmo Numrico
viernes, 28 de marzo de 2014
16:51
Apuntes Recur pgina 13
return 1;
return CuentaDig(num/10)+1;
}else{
}
}
Validacin del algoritmo : Observar si termina y resuelve el problema d.
Graficar la pila de registros de activacion para el algorimo, si gusta con el
siguiente algoritmo equivalente.
int CuentaDig(int num){
return 1;
if (num<10) {
int res= CuentaDig(num/10);
res=res+1;
return res;
}else{
}
}
Num=546
CuentaDig(num/10) + 1
Num=54
CuentaDig(num/10) + 1
Num=5
CuentaDig(num/10) + 1
Paso1
Paso2
Paso3
Retorna 1
Paso4
Retorna 2
Paso5
Retorna 3
3
Secuenciacin en clase:
Mostrar la pila que se forma por cada llamada recursiva. Esta sirve para ver que ah
se guarda (direccin de memoria + valor del parmetros)
1.
Aqu se refleja lo que pasa en cada RETURN 2.
Comienza desde el caso base el des Apilado. 3.
Apuntes Recur pgina 14
Algoritmo para obtener el binario de un numero en base 10
Comprender el procedimiento de mtodos recursivos 1.
Especificar los casos de anlisis de algoritmos recursivos: Caso base y Caso General 2.
Conocer la validacin y terminacin de un algoritmo recursivo 3.
Analizar el algoritmo recursivo para obtener el binario de un numero en base 10 4.
Objetivo:
Anlisis del Algoritmo 1.
5 --> ?(binario)
Por divisiones sucesivas entra la base 2
5 div 2 = 2 resto 1 --> Paso 1
2 div 2 = 1 resto 0 --> Paso 2
1 div 2 = 0 resto 1 --> Paso 3
0 div 2 = 0 resto 0
Luego los digitos de la conversion estan en los residios de cada division
peo en el sentido inverso
resto = 0 num=0
Paso 3 --> (return *10) + (num % 2) => 0 * 10 + 1%2 =1
Paso 2 --> 1 * 10 + 2%2 =10
Paso 1 --> 10 * 10 + 5%2 =101
Tipo: Funcin o Proceso i.
Tipos de datos que entran 1)
Tipo de dato que retorna si es Funcin. 2)
Parmetros ii.
Perfil del mtodo: Identificar a.
Unsigned Int numero = Binario (unsigned int num)
num = 0 --> Este es el caso base 1)
Caso Base : El algoritmo no se llama a si mismo. Permite que el algoritmo termine
en algn momento
i.
Caso General : El mtodo se llama a si mismo ii.

Binario (num) {
1 num=0 ;
Binario (num/2) *10 + (num%2) num>0 ;
Anlisis de casos b.
Codificacin en C++ c.
Diseo del Algoritmo 2.
Metodologa:
Modelo 5: Siguiendo un algoritmo Numrico
viernes, 28 de marzo de 2014
16:51
Apuntes Recur pgina 15
IF (pregunta por el caso base) {
//Caso Base
} else {
// Paso Recursivo
}
unsigned int Binario2(unsigned int num){
//int res=0;
if (num==0) {
return num;
//Caso Base
return Binario2(num /2)*10 + (num%2);
} else{
}
};
Validacin del algoritmo : Observar si termina y resuelve el problema d.
Graficar la pila de registros de activacion para el algorimo, si gusta con el siguiente
algoritmo equivalente.
unsigned int Binario2(unsigned int num){
if (num==0) {
return num;
//Caso Base
int res=Binario2(num/2);
res=res*10 + (num %2);
return res;
} else{
}
};
Num=5
Binario2(num/2)
10 *10 + ( 5 % 2)
Num=2
Binario2(num/2)
1 *10 + ( 2 % 2)
Num=1
Binario2(num/2)
0 * 10 + (1 % 2)
Paso1
Paso2
Paso5
Retorna 1
Paso6
Retorna 10
Paso7
Retorna 101
101
Num=0
Binario2(num/2)
Paso3
Paso4
Retorna 0
Apuntes Recur pgina 16
Num=5
Binario2(num/2)
10 *10 + ( 5 % 2)
Num=2
Binario2(num/2)
1 *10 + ( 2 % 2)
Num=1
Binario2(num/2)
0 * 10 + (1 % 2)
Paso1
Paso2
Paso5
Retorna 1
Paso6
Retorna 10
Paso7
Retorna 101
101
Num=0
Binario2(num/2)
Paso3
Paso4
Retorna 0
Secuenciacin en clase:
Mostrar la pila que se forma por cada llamada recursiva. Esta sirve para ver que ah se guarda
(direccin de memoria + valor del parmetros)
1.
Aqu se refleja lo que pasa en cada RETURN 2.
Comienza desde el caso base el des Apilado. 3.
Apuntes Recur pgina 17
Ejercicio1: Dividir un numero en 2 . Pares a la derecha 1.
Ejercicio 2. Vector con variables 2.
Ejercicio 3. Vector con TstringGrid 3.
Ejercicio 4. Matriz con variables 4.
Ejercicio 5. Matriz con TstringGrid 5.
Ejercicios Resueltos
viernes, 21 de marzo de 2014
11:32
Apuntes Recur pgina 18
if (nro<10) {tot=0;}
ContarDig(nro/10,tot);}
tot++;
else{
void ContarDig(int nro, int&tot){
}
//---------------------------------------------------------------------------
if (nro==0) {return 0;}
else{return 1;}
if(pot==0) {
}
if (nro==1) {return 1;}
if (pot==1) {return nro;}
else{return nro*Potencia(nro,pot-1);}
else{
}
else{
}
int Potencia(int nro, int pot){
}
if (nro<10)
return nro ;
unsigned int res=PartirPi(nro/10);
unsigned int dig=nro%10;
if (dig%2==0) {dig=res*10+dig;}
else{
int tot;
ContarDig(res,tot);
dig=dig*Potencia(10,tot)+res;
}
return dig;
else{
}
unsigned int PartirPi(unsigned int nro){
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String cad=InputBox("PARTIR NUMERO","Introduzca el numero ","0");
unsigned int res=StrToInt(cad);
unsigned int num=PartirPi(res);
ShowMessage(num);
}
Ejercicio1: Dividir un numero en 2 . Pares a la Izquierda e Impares a
la derecha.
sbado, 03 de noviembre de 2012
10:55
Apuntes Recur pgina 19
Crear un algoritmo recursivo para cargar los elementos de un vector.
0 1 2 3 4
10 20 30 125 7
N =Numero de elementos del vector = 5
Pos = Avanza desde Cero hasta alcanzar a N
Caso Base pos == N Pos alcanza el limite mximo
Paso Recursivo pos+1 Pos se aproxima a N . Es la variable de recursin
Procesos a Implementar I)
void CarVec(int [],int);
void CarVecMan(int [],int,int);
void MosVec(int [],int ,int);
void MosVecInv(int [],int ,int );
Codificacion II)
void CarVec(int vec[],int n){
int pos=0;
CarVecMan(vec,n,pos);
};
void CarVecMan(int vec[],int n,int pos){
if (pos==n) { return;
}else{
int ele=rand()*(10-1);
vec[pos]=ele;
CarVecMan(vec,n,pos+1); }
}
void MosVec(int vec[],int n,int pos){
if (pos==n) { return;
}else{
ShowMessage(vec[pos]);
MosVec(vec,n,pos+1);
}
};
void MosVecInv(int vec[],int n,int pos){
if (pos==n) { return;
}else{
MosVec(vec,n,pos+1);
ShowMessage(vec[pos]);
}
};
void __fastcall TForm1::CarMan1Click(TObject *Sender)
{
Ejercicio 2. Vector con variables
sbado, 03 de noviembre de 2012
11:04
Apuntes Recur pgina 20
{
int dim = StrToInt(InputBox("VECTOR","Introduzca la Dimensin:","4"));
int *vec=new int(dim);
CarVec(vec,dim); int pos=0;
MosVec(vec,dim,pos); ShowMessage("Vector inverso");
MosVecInv(vec,dim,pos);
delete [] vec;
}
Apuntes Recur pgina 21
Crear un algoritmo recursivo para cargar los elementos de un vector.
0 1 2 3 4
10 20 30 125 7
N =Numero de elementos del vector = 5
Pos = Avanza desde Cero hasta alcanzar a N
Caso Base pos == Grid->ColCount Pos alcanza el limite mximo en columnas
Paso Recursivo pos+1 Pos se aproxima a N . Es la variable de recursin
Grid1->FixedRows=0;
Grid1->FixedCols=0;
Grid1->Visible=visible;
Grid1->RowCount=1;
Grid1->ColCount=col;
Grid1->Cells[j][0]="";
}
for (int j = 0; j < col; j++) {
Preparar el Grid para ser un vector I)
Procesos a Implementar II)
void CarVecGrid(TStringGrid *,int,int );
Codificacion JJ)
void CarVecGrid(TStringGrid *Grid,int num,int pos){
if(pos==num){ Grid->ColCount=num;
}else{
CarVecGrid(Grid,num,pos+1);
Grid->Cells[pos][0]=1+rand()%(101-1);
}
}
void __fastcall TForm1::Carvec1Click(TObject *Sender)
{
Grid1->FixedRows=0;
Grid1->FixedCols=0;
Grid1->Visible=visible;
Grid1->RowCount=1;
Grid1->ColCount=col;
int num=StrToInt(InputBox("CARGAR VECTOR","Nro. de Elementos","0"));
int pos=0;
CarVecGrid(Grid1,num,pos);
}
Ejercicio 3. Vector con TstringGrid
sbado, 03 de noviembre de 2012
11:04
Apuntes Recur pgina 22
Crear un algoritmo recursivo para cargar los elementos de un vector.
0 1 2 3 4
0 20 30 125 7
1 5 1 0 1
2 0 1 0 1
NFil =Numero de filas matriz
NCol=Numero de columnas matriz
Pf = Avanza desde Cero hasta alcanzar a NFil
Pc = Avanza desde Cero hasta alcanzar a NCol
Caso Base pf == NFil
Pc == NCol
Posf y PosC alcanzan el limite mximo
Paso Recursivo Pc+1 Pc se aproxima a NCol . Es una variable de recursin
Paso Recursivo Pf+1 Pf se aproxima a NFIl. Es una variable de recursin.
Procesos a Implementar A)
void CarMat(int **,int ,int );
void CarMatVar(int **,int ,int,int,int);
void MosMat(int **,int ,int,int,int );
void MosMatInv(int **,int ,int );
Codificacion B)
void CarMat(int **mat,int nfil,int ncol){
int pf=0;
int pc=0;
CarMatVar(mat,nfil,ncol,pf,pc);
};
void CarMatVar(int **mat,int nfil,int ncol,int pf,int pc){
if(pc==ncol){
pc=0;
pf=pf+1;
}
if(pf == nfil){
return;
mat[pf][pc]=1+rand()%(100-1);
CarMatVar(mat,nfil,ncol,pf,pc+1);
}else{
}
};
void MosMa(int **mat,int nfil,int ncol,int pf,int pc){
if(pc==ncol){
pc=0;
pf=pf+1;
Ejercicio 4. Matriz con variables
sbado, 03 de noviembre de 2012
11:04
Apuntes Recur pgina 23
pf=pf+1;
}
if(pf == nfil){
return;
ShowMessage(mat[pf][pc]);
MosMat(mat,nfil,ncol,pf,pc+1);
}else{
}
};
void __fastcall TForm1::carManu1Click(TObject *Sender)
{
int nfil = StrToInt(InputBox("MATRIZ","Introduzca Nro. Filas:","4"));
int ncol = StrToInt(InputBox("MATRIZ","Introduzca Nro. Columnas:","4"));
int **mat;
mat=new int* [nfil];
for (int i=0; i < nfil; i++) {
mat[i]=new int[ncol];
}
CarMat(mat,nfil,ncol);
Int posf=0;
Int posc=0;
MosMat(mat,nfil,ncol,posf,posc);
for (int i=0; i < nfil; i++) {
delete []mat[i];
}
delete [] mat;
}
Apuntes Recur pgina 24
Crear un algoritmo recursivo para cargar los elementos de una matriz.
0 1 2 3 4
0 20 30 125 7
1 5 1 0 1
2 0 1 0 1
NFil =Numero de filas matriz
NCol=Numero de columnas matriz
Pf = Avanza desde Cero hasta alcanzar a NFil
Pc = Avanza desde Cero hasta alcanzar a NCol
Caso Base pf == NFil
Pc == NCol
Posf y PosC alcanzan el limite mximo
Paso Recursivo Pc+1 Pc se aproxima a NCol . Es una variable de recursin
Paso Recursivo Pf+1 Pf se aproxima a NFIl. Es una variable de recursin.
Grid1->FixedRows=0;
Grid1->FixedCols=0;
Grid1->Visible=visible;
Grid1->RowCount=fil;
Grid1->ColCount=col;
Grid1->Cells[j][i]="";
for (int j = 0; j < col; j++) {
}
for (int i=0; i < fil; i++) {
}
Preparar el Grid para ser una matriz I)
Procesos a Implementar II)
void MatrizS1(TStringGrid *,int,int,int,int,int &);
Codificacion JJ)
void MatrizS1(TStringGrid *Grid1,int fil,int col,int pf,int pc,int &val){
if (pc==col){
pf=pf+1;
pc=0;
}
if(pf==fil){
Grid1->ColCount=col;
Ejercicio 5. Matriz con TstringGrid
sbado, 03 de noviembre de 2012
11:04
Apuntes Recur pgina 25
Grid1->ColCount=col;
Grid1->RowCount=fil;
val=0;
}else{
MatrizS1(Grid1,fil,col,pf,pc+1,val);
val=val+1;
Grid1->Cells[pc][pf]=val;
}
}
void __fastcall TForm1::Genera11Click(TObject *Sender)
{
int num=StrToInt(InputBox("Matriz 1","Introduzca Nro. de filas y columnas","1"));
Grid1->FixedRows=0;
Grid1->FixedCols=0;
Grid1->Visible=visible;
Grid1->RowCount=fil;
Grid1->ColCount=col;
Grid1->Cells[j][i]="";
for (int j = 0; j < col; j++) {
}
for (int i=0; i < fil; i++) {
}
int elem=0;
MatrizS1(Grid1,num,num,0,0,elem);
elem=0;
}
Apuntes Recur pgina 26

You might also like