Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Array dinámico bidimensional en procedimiento recursivo (https://www.clubdelphi.com/foros/showthread.php?t=89108)

jocaro 28-09-2015 11:44:45

Array dinámico bidimensional en procedimiento recursivo
 
Buenos días

A ver si alguien me puede ayudar

Si en un procedimiento recursivo defino una matriz dinámica bidimensional, ¿en cada recursión estaré creando una matríz dinámica bidimensional distinta?,
o todas apuntarán a la misma zona de memoria. En el caso de que el comportamiento sea éste último, como podria conseguir una matriz por cada ejecución
del procedimiento

Un ejemplo somero del código sería el siguiente:

Código Delphi [-]
// Se pasa un elemento de la matriz creada en el nivel de recursión desde el que se llama                                    
procedure TSDIAppForm.ProcedimientoRecursivo(Clave: Integer; Dato: Integer);                                
var

  iBucle: Integer;
  iEleMat: Integer;                                 // Elementos de la matriz
  mdHijos: array of array of integer;          // Matriz de elementos con hijos

begin

  iEleMat := 0

  // Bucle de carga de la matriz. En cada recursión podrá tener un tamaño diferente

  Tabla.Locate('ClaPad', Clave, []);

  while (Tabla.fieldByName('ClaPad').asinteger = Clave)
  begin
    iEleMat := iEleMat + 1;
    SetLength( mdHijos, iEleMat, 2 );
    mdHijos[ iEleMat - 1, 0 ] := Tabla.fieldByName('Clave').asinteger;
    mdHijos[ iEleMat - 1, 1 ] := Tabla.fieldByName('Clapad').asinteger;
  end;

  Tabla.Next;

 end;

  // Hacemos una recursión por cada uno de los elementos de la matriz en este nivel

  for iBucle := low(mdHijos) to high(mdhijos) do
  begin
    ProcedimientoRecursivo( mdHijos[ iBucle, 0 ], mdHijos[ iBucle, 1 ] );
  end;

end;

Gracias de antemano.

Ñuño Martínez 28-09-2015 12:59:22

Crea una nueva en cada iteración, ya que es local, no global.

Entiendo la confusión, ya que en algún lenguaje la memoria de las listas y cadenas se comparte o siempre es global, pero en el caso de Delphi no es así.

Neftali [Germán.Estévez] 28-09-2015 15:17:12

Cita:

Empezado por jocaro (Mensaje 497252)
Si en un procedimiento recursivo defino una matriz dinámica bidimensional, ¿en cada recursión estaré creando una matríz dinámica bidimensional distinta?,

Correcto.
Cada vez que llamas al procedimiento creas una nueva matriz.

Deberás pasarla como parámetro al procedimiento (por ejemplo) para tenerla disponible en las diferentes llamadas.

jocaro 30-09-2015 14:22:42

Gracias a ambos por vuestra ayuda. Un saludo


La franja horaria es GMT +2. Ahora son las 03:50:14.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi