Aquí tienes un ejemplo de procesar recursivamente datos estructurados en árbol. Es una función de un programa de servicio, creado con ACTGRP(*CALLER). Espero que te sirva.

      *
      **************************************************************************
      *
      * Pcom_dependientes. Devuelve en una lista dinámica ordenada los puestos
      *                    comerciales dependientes del pasado por parámetro,
      *                    y recursivamente los dependientes de éstos, ....
      *                    Devuelve true si no hay
      *                    error y false en caso contrario. La lista NO es
      *                    inicializada antes de cargarla
      *
      **************************************************************************
      *
     P pCom_Dependientes...
     P                 B                   export
     D                 PI             1N
     D   pcom                              like(refesal.pcom) value
     D   lista                             likeds(listaDinamica_rf)
      *
     D anterior        S                   like(listaDinamica_rf.numElems)
     D ultimo          S                   like(listaDinamica_rf.numElems)
     D i               S                   like(listaDinamica_rf.numelems)
     D wPcom           S                   like(refesal.pcom)
     D error           S              1N

      /free

       if pcom = 0 ;
         return true ;
       endif ;

       if not %open(vnl04501) ;
         open vnl04501 ;
       endif ;
       //
       // Cargo los dependientes directos
       setll pcom vnl04501 ;
       reade pcom vnl04501 ;
       anterior = lista.numElems ;
       dow not %eof ;
         if vn045.ecsitu <> 'BA' ;
           //
           // Si no se puede añadir, dejo la lista como estaba y devuelvo false
           if not listaDin_anyadirUns(lista: vn045.ecpcom) ;
             lista.numElems = anterior;
             return false ;
           endif ;
         endif ;
         reade pcom vnl04501 ;
       enddo ;
       ultimo = lista.numElems ;

       //
       // proceso recursivamente los descendientes de los que he añadido
       if anterior < ultimo ;
         for i = anterior + 1 to ultimo ;
           wpcom = listaDin_recuperarUns(lista: i: error ) ;
           if error or not pCom_dependientes(wpcom: lista) ;
             lista.numElems = anterior ;
             return false ;
           endif ;
         endfor ;
       endif ;

       return true ;

      /end-free
     P pCom_Dependientes...
     P                 E
Saludos.

Fernando Pérez 

Cerámica Saloni. Dpto. Auditoría y Organización



[EMAIL PROTECTED] escribió:

Hoal a todos,

Alguien tiene un ejemplo de como crear  y  llamar a una funcion recursiva?.


Un saludo

Jesús Mª Arzak Capilla
Talleres de Escoriaza,S.A.(TESA)
Dpto Proceso de Datos

www.tesa.es
ADVERTENCIA/WARNING

ESTE CORREO ELECTRONICO CONTIENE INFORMACION PRIVADA Y
ESTRICTAMENTE CONFIDENCIAL. Si usted no es el destinatario del
presente mensaje no esta autorizado a leerlo, retenerlo, copiarlo o
difundirlo. Ni esta empresa ni el remitente asume ninguna responsabilidad
referente a la posible transmision de virus y es responsabilidad del
receptor realizar un escaneo del mensaje y de sus anexos (si los hubiera) .

THIS E-MAIL IS PRIVILEGED, CONFIDENTIAL AND CONTAINS PRIVATE
INFORMATION. Any reading, retention, distribution or copying of this
communication by any person other than its intended recipient is
prohibited. Neither this company nor the sender accepts any responsibility
for viruses and it is your responsibility to scan the email and attachments
(if any) .


__________________________________________________
Forum.HELP400 es un servicio m&amp;#225;s de NEWS/400.
&amp;#169; Publicaciones Help400, S.L. - Todos los derechos reservados
http://www.help400.es
_____________________________________________________

Para darte de baja visita la siguente URL:
http://listas.combios.es/mailman/listinfo/forum.help400

  
begin:vcard
fn;quoted-printable:Fernando P=C3=A9rez
n;quoted-printable:P=C3=A9rez;Fernando
org;quoted-printable:;Auditor=C3=ADa y Organizaci=C3=B3n
email;internet:[EMAIL PROTECTED]
tel;work:Ext. 627
x-mozilla-html:TRUE
version:2.1
end:vcard

__________________________________________________
Forum.HELP400 es un servicio m&amp;#225;s de NEWS/400.
&amp;#169; Publicaciones Help400, S.L. - Todos los derechos reservados
http://www.help400.es
_____________________________________________________

Para darte de baja visita la siguente URL:
http://listas.combios.es/mailman/listinfo/forum.help400

Responder a