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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  crear matriz recursiva
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: crear matriz recursiva  (Leído 5,312 veces)
acer-x

Desconectado Desconectado

Mensajes: 8


Ver Perfil
crear matriz recursiva
« en: 7 Enero 2020, 01:59 am »

buenas tengo una duda, es crear una matriz recursivamente, recibiendo n como dimension de esta, entiendo que normalmente se hace con el modo iterativo, pero recursivamente no se me viene nada a la cabeza, llevo bastante ya buscando y no le pillo la forma. si me pueden ayudar lo agradeceria.


En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: crear matriz recursiva
« Respuesta #1 en: 7 Enero 2020, 04:52 am »

Creo que dejas varias dudas en tu mensaje.
Normalmente una matriz es bidimensional (con n filas y m columnas) pero cuando la matriz es cuadrada, en vez de decir que tiene n filas y n columnas (o como se denota normalmente: nxn), se dice que es de orden n.
Ahora bien, en tu caso no estoy seguro de que el parámetro n se refiera a la dimensión o al orden.

Es mejor que pongas un ejemplo concreto, como por ejemplo (predicando con el ejemplo :xD):
"Necesito implementar una función que reciba como parámetro el orden de la matriz <crearMatrizRecursiva(int orden)> y genere una matriz de 2 dimensiones y de tamaño (orden x orden)"

Para ese supuesto que he puesto primero imagina cómo lo harías de manera iterativa:
(No sé en que lenguaje lo necesitas así que haré el ejemplo en C++... Hay que procurar ser lo más concreto posible cuando se solicita ayuda)
Código
  1. int** generarMatriz(int orden){
  2.    int **matriz = new int* [orden];
  3.    for(size_t i = 0; i < orden; ++i)
  4.        matriz[i] = new int [orden];
  5.    return matriz;
  6. }

La recursividad normalmente lo que hace es eliminar un bloque iterativo y convertirlo en una sentencia condicional. Además alguno de los parámetros tiene que ir cambiando para en algún momento llegar al caso base que es el que termina con las llamadas recursivas.
Como en la función anterior sólo tenemos un bloque iterativo, será la parte que implementaremos de manera recursiva. Existen diferentes formas de hacerlo, una de ellas es esta:
Código
  1. int** generarMatriz(int orden){
  2.    int **matriz = new int* [orden];
  3.    generarMatrizRecursiva(matriz, orden-1, orden);
  4.    return matriz;
  5. }
  6.  
  7. void generarMatrizRecursiva(int **matriz, int filaActual, int orden){
  8.    if(filaActual >= 0){
  9.        matriz[filaActual] = new int [orden];
  10.        generarMatrizRecursiva(matriz, filaActual-1, orden);
  11.    }
  12. }

Esta versión es muy simple pero creo que es la mejor para que entiendas cómo funciona la recursividad. Si quieres añadirle un poco más de gracia, te recomiendo cambiar el orden de las instrucciones y comprobar si puedes explicar su funcionamiento ahora. Pero eso ya es cosa tuya... :rolleyes:
Código
  1. void generarMatrizRecursiva(int **matriz, int filaActual, int orden){
  2.    if(filaActual >= 0){
  3.        generarMatrizRecursiva(matriz, filaActual-1, orden);
  4.        matriz[filaActual] = new int [orden];
  5.    }
  6. }

Y no olvides liberar toda esa memoria antes de terminar el programa... :silbar:

PD: No te acostumbres a recibir los ejercicios hechos. Esta ha sido una excepción por la Navidad   :-X


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.351


Ver Perfil
Re: crear matriz recursiva
« Respuesta #2 en: 7 Enero 2020, 14:43 pm »

...crear una matriz recursivamente, recibiendo n como dimension de esta...
Lo más importante: ...si estás aprendiendo, aprende, pero no mal aprendas.
La recursividad debe dejarse exclusivamente para las funcionalidades que lo precisan y ninguna más.
Esta pretensión tuya, entra en ese grupo de 'y nunguna más'. No mal aprendas...
En línea

acer-x

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: crear matriz recursiva
« Respuesta #3 en: 9 Enero 2020, 03:55 am »

Muchas gracias a los dos, lo lamento por no explicar bien mi problema, pense que seria mas facil de explicar pero basicamente lo que me piden es a partir de una matriz: typedef float matriz[10][10], crear una funcion mendelbrot(c,n,m) que cree una matriz recursivamente recibiendo como orden n^2, osea que tiene que ser del orden 2x2 3x3 y asi, el problema es que recibe una matriz y no la crea como me lo indicaron anteriormente, y eso es lo que me complica. muchas gracias a ambos por sus respuestas, no he podido encontrar algo acerca de esto y me ayudan muchisimo.
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: crear matriz recursiva
« Respuesta #4 en: 9 Enero 2020, 21:02 pm »

Supongo que cuando dices crear es inicializar no?

Si no sé a qué hace referencia cada parámetro de la función pues la cosa está un poco complicada. Aunque por lo que dices supongo que uno es la matriz, otro el orden y otro es la variación para la recursividad. Con esa idea, la función quedaría prácticamente igual a la que puse anteriormente:
Código
  1. void f(float matriz[][SIZE], int orden, int fila){
  2.  if(fila < orden){
  3.    f(matriz, orden, fila+1);
  4.    for(int i = 0; i < orden; ++i)
  5.      matriz[fila][i] = fila; // el valor lo he puesto como ejemplo
  6.  }
  7. }

La función tendrías que llamarla inicialmente como:
Código
  1. f(matriz, orden, 0);
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[SWT - JAVA] Crear matriz de números
Java
JorgeEMX 2 7,011 Último mensaje 4 Enero 2007, 07:29 am
por JorgeEMX
recorrido de una matriz de forma recursiva
Programación General
dark_headhunter 4 17,029 Último mensaje 10 Junio 2011, 23:39 pm
por Khronos14
Function(Crear Matriz) C++
Programación C/C++
NecBalaam 5 6,745 Último mensaje 23 Agosto 2011, 04:57 am
por NecBalaam
Cargar una matriz de forma recursiva[c]
Programación C/C++
axeelcs 3 12,670 Último mensaje 1 Septiembre 2011, 20:43 pm
por LearningSpanishProgrammer
crear matriz con new en una clase c++
Programación C/C++
fafafa01 2 1,954 Último mensaje 28 Septiembre 2017, 23:41 pm
por _TTFH_3500
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines