ABAP写的一个递归

需求:计算下面树形结构中每个子节点与最上层父节点的对应关系。

ABAP写的一个递归

DATA:BEGIN OF lt_ztab OCCURS 0,
      a  TYPE string,
      b  TYPE string,
     END OF lt_ztab.
DATA:lw_ztab LIKE LINE OF lt_ztab,
     lw_ztab1 LIKE LINE OF lt_ztab,
     lt_ltab LIKE TABLE OF lt_ztab WITH HEADER LINE.

DATA:BEGIN OF lt_mtab OCCURS 0,
      m  TYPE string,
END OF lt_mtab.

DATA:lw_mtab LIKE LINE OF lt_mtab.
DATA:l_a TYPE string,
     l_b TYPE string.
lw_ztab-a = 'A'.
lw_ztab-b = 'B'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-a = 'B'.
lw_ztab-b = 'D'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-a = 'B'.
lw_ztab-b = 'E'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-a = 'D'.
lw_ztab-b = 'M'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-a = 'M'.
lw_ztab-b = 'W'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-a = 'M'.
lw_ztab-b = 'L'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-a = 'C'.
lw_ztab-b = 'F'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-a = 'F'.
lw_ztab-b = 'N'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-a = 'C'.
lw_ztab-b = 'G'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-a = 'C'.
lw_ztab-b = 'H'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-a = 'A'.
lw_ztab-b = 'C'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-a = 'A1'.
lw_ztab-b = 'B1'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-a = 'B1'.
lw_ztab-b = 'D1'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-a = 'B1'.
lw_ztab-b = 'E1'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-a = 'D1'.
lw_ztab-b = 'M1'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-a = 'C1'.
lw_ztab-b = 'F1'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-a = 'F1'.
lw_ztab-b = 'N1'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-a = 'C1'.
lw_ztab-b = 'G1'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-a = 'C1'.
lw_ztab-b = 'H1'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-a = 'A1'.
lw_ztab-b = 'C1'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-a = 'X'.
lw_ztab-b = 'Y'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-a = 'X'.
lw_ztab-b = 'C'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-a = 'X1'.
lw_ztab-b = 'Y1'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-a = 'X1'.
lw_ztab-b = 'B'.
APPEND lw_ztab TO lt_ztab.

lw_mtab-m = 'A'.
APPEND lw_mtab TO lt_mtab.

lw_mtab-m = 'A1'.
APPEND lw_mtab TO lt_mtab.

lw_mtab-m = 'X'.
APPEND lw_mtab TO lt_mtab.

lw_mtab-m = 'X1'.
APPEND lw_mtab TO lt_mtab.

SORT lt_ztab BY a b.

LOOP AT lt_mtab INTO lw_mtab.
  LOOP AT lt_ztab INTO lw_ztab WHERE a = lw_mtab-m.

l_a = lw_ztab-a.
    l_b =  lw_ztab-b .

PERFORM: get_lastdata USING l_a l_b .

ENDLOOP.
ENDLOOP.

LOOP AT lt_ltab.
  WRITE: / lt_ltab-a,lt_ltab-b.
ENDLOOP.

FORM get_lastdata USING p_a TYPE string  p_b TYPE string.

lt_ltab-a = p_a.
  lt_ltab-b = p_b.
  APPEND lt_ltab.

READ TABLE lt_ztab WITH KEY a = p_b BINARY SEARCH.
  IF sy-subrc NE 0.
    EXIT.
  ELSE.
    LOOP AT lt_ztab INTO lw_ztab1 WHERE a = p_b.
      PERFORM: get_lastdata USING p_a lw_ztab1-b .
    ENDLOOP.
  ENDIF.

ENDFORM.

执行结果:

ABAP写的一个递归

上一篇:Devexpress 汉化


下一篇:Android资源管理框架(Asset Manager)简介和学习计划