• 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'.
    lw_ztab-'B'.
    APPEND lw_ztab TO lt_ztab.

    lw_ztab-'B'.
    lw_ztab-'D'.
    APPEND lw_ztab TO lt_ztab.

    lw_ztab-'B'.
    lw_ztab-'E'.
    APPEND lw_ztab TO lt_ztab.

    lw_ztab-'D'.
    lw_ztab-'M'.
    APPEND lw_ztab TO lt_ztab.

    lw_ztab-'M'.
    lw_ztab-'W'.
    APPEND lw_ztab TO lt_ztab.


    lw_ztab-'M'.
    lw_ztab-'L'.
    APPEND lw_ztab TO lt_ztab.


    lw_ztab-'C'.
    lw_ztab-'F'.
    APPEND lw_ztab TO lt_ztab.

    lw_ztab-'F'.
    lw_ztab-'N'.
    APPEND lw_ztab TO lt_ztab.

    lw_ztab-'C'.
    lw_ztab-'G'.
    APPEND lw_ztab TO lt_ztab.

    lw_ztab-'C'.
    lw_ztab-'H'.
    APPEND lw_ztab TO lt_ztab.

    lw_ztab-'A'.
    lw_ztab-'C'.
    APPEND lw_ztab TO lt_ztab.

    lw_ztab-'A1'.
    lw_ztab-'B1'.
    APPEND lw_ztab TO lt_ztab.

    lw_ztab-'B1'.
    lw_ztab-'D1'.
    APPEND lw_ztab TO lt_ztab.

    lw_ztab-'B1'.
    lw_ztab-'E1'.
    APPEND lw_ztab TO lt_ztab.

    lw_ztab-'D1'.
    lw_ztab-'M1'.
    APPEND lw_ztab TO lt_ztab.

    lw_ztab-'C1'.
    lw_ztab-'F1'.
    APPEND lw_ztab TO lt_ztab.

    lw_ztab-'F1'.
    lw_ztab-'N1'.
    APPEND lw_ztab TO lt_ztab.

    lw_ztab-'C1'.
    lw_ztab-'G1'.
    APPEND lw_ztab TO lt_ztab.

    lw_ztab-'C1'.
    lw_ztab-'H1'.
    APPEND lw_ztab TO lt_ztab.

    lw_ztab-'A1'.
    lw_ztab-'C1'.
    APPEND lw_ztab TO lt_ztab.

    lw_ztab-'X'.
    lw_ztab-'Y'.
    APPEND lw_ztab TO lt_ztab.

    lw_ztab-'X'.
    lw_ztab-'C'.
    APPEND lw_ztab TO lt_ztab.

    lw_ztab-'X1'.
    lw_ztab-'Y1'.
    APPEND lw_ztab TO lt_ztab.

    lw_ztab-'X1'.
    lw_ztab-'B'.
    APPEND lw_ztab TO lt_ztab.

    lw_mtab-'A'.
    APPEND lw_mtab TO lt_mtab.

    lw_mtab-'A1'.
    APPEND lw_mtab TO lt_mtab.

    lw_mtab-'X'.
    APPEND lw_mtab TO lt_mtab.

    lw_mtab-'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 lw_mtab-m.

        l_a lw_ztab-a.
        l_b =  lw_ztab-.

        PERFORMget_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-p_a.
      lt_ltab-p_b.
      APPEND lt_ltab.

      READ TABLE lt_ztab WITH KEY p_b BINARY SEARCH.
      IF sy-subrc NE 0.
        EXIT.
      ELSE.
        LOOP AT lt_ztab INTO lw_ztab1 WHERE p_b.
          PERFORMget_lastdata USING p_a lw_ztab1-.
        ENDLOOP.
      ENDIF.

    ENDFORM

    执行结果:

  • 相关阅读:
    译:编程面试的10大算法概念汇总
    Android内存优化之封装九宫格
    Android Java 程序员必备开发工具
    译:如何成为一个通晓多种编程语言的程序员
    8大排序算法图文讲解
    Android酷炫实用的开源框架(UI框架)
    Android动态加载字节码
    利用无效字节码指令引发逆向工具崩溃(二)
    oracle 12c linux服务器启动监听
    oracle无主键去重方法
  • 原文地址:https://www.cnblogs.com/szfeng/p/3156198.html
Copyright © 2020-2023  润新知