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写的一个递归的更多相关文章
- 原生js写的一个弧形菜单插件
弧形菜单是一种半弧式或者全弧形菜单,是一种不同于传统横向或者竖向菜单形式的菜单.最近在网上看到好多人写出了这种效果,于是也尝试自己写了一个. 实现方式:原生态js 主要结构: 1.参数合并 var d ...
- 输入一个数字n 如果n为偶数则除以2,若为奇数则加1或者减1,直到n为1,求最少次数 写出一个函数
题目: 输入一个数字n 如果n为偶数则除以2,若为奇数则加1或者减1,直到n为1,求最少次数 写出一个函数 首先,这道题肯定可以用动态规划来解, n为整数时,n的解为 n/2 的解加1 n为奇数时 ...
- C# winfrom 写的一个搜索助手,可以按照标题和内容搜索,支持doc,xls,ppt,pdf,txt等格式的文件搜索
C# winfrom 写的一个搜索助手,可以按照标题和内容搜索,指定目录后,遍历搜索文件和子目,现在只写了支持.DOC.DOCX.XLS.XLSX.PPT.PPTX.PDF.HTML.HTM.TXT等 ...
- 今天写了一个简单的新浪新闻RSS操作类库
今天,有位群友问我如何获新浪新闻列表相关问题,我想,用正则表达式网页中取显然既复杂又不一定准确,现在许多大型网站都有RSS集合,所以我就跟他说用RSS应该好办一些. 一年前我写过一个RSS阅读器,不过 ...
- 搞了我一下午竟然是web.config少写了一个点
Safari手机版居然有个这么愚蠢的bug,浪费了我整个下午,使尽浑身解数,国内国外网站搜索解决方案,每一行代码读了又想想了又读如此不知道多少遍,想破脑袋也想不通到底哪里出了问题,结果竟然是web.c ...
- 用C3中的animation和transform写的一个模仿加载的时动画效果
用用C3中的animation和transform写的一个模仿加载的时动画效果! 不多说直接上代码; html标签部分 <div class="wrap"> <h ...
- 写了一个常规性生成merge 的小脚本
现在使用数据库来写存储过程,动不动参数就会用到xml ,当然罗,优势也很明显,参数相对固定,而且灵活,如果要修改或者什么的,中间接口层也不需要做变化,只需要修改封装的存储过程以及程序传参就ok了. 随 ...
- c# .Net :Excel NPOI导入导出操作教程之List集合的数据写到一个Excel文件并导出
将List集合的数据写到一个Excel文件并导出示例: using NPOI.HSSF.UserModel;using NPOI.SS.UserModel;using System;using Sys ...
- 自己写的一个SqlHelper,感觉使用起来挺方便的
自己写的一个SqlHelper,感觉使用起来挺方便的 using System; using System.Data; using System.Collections.Generic; using ...
随机推荐
- Android(java)学习笔记209:采用get请求提交数据到服务器(qq登录案例)
1.GET请求: 组拼url的路径,把提交的数据拼装url的后面,提交给服务器. 缺点:(1)安全性(Android下提交数据组拼隐藏在代码中,不存在安全问题) (2)长度有限不能超过4K(h ...
- Android(java)学习笔记157:使用Dexdump等工具进行反编译
使用Dex等工具进行反编译步骤: (1)首先找到Android软件安装包中的class.dex,把APK文件改名为".zip",然后解压缩其中的class.dex文件,这是Java ...
- [置顶] linux第二天,g++,gcc,ps,cat,sort,grep,kill,less,ls -l ,
33.less sample.txt 分页输出文件内容到屏幕 34./search content (搜索内容) 可以将文档中有searchcontent 的行输出到屏幕 35.grep scienc ...
- ERROR 1114 (HY000): The table 'adv_date_tmp' is full(Mysql临时表应用)
场景:需要对现在数据库的数据进行批量的进行is_del=1的操作,但是遇到一个问题,在执行sql的时候发现sql不能在查询特定表的时候再嵌套查询来做update的操作,经过讨论,后续我们想到用临时表的 ...
- Spring MVC自定义统一异常处理类,并且在控制台中输出错误日志
在使用SimpleMappingExceptionResolver实现统一异常处理后(参考Spring MVC的异常统一处理方法), 发现出现异常时,log4j无法在控制台输出错误日志.因此需要自定义 ...
- apache性能配置优化
最近在进行apache性能优化设置.在修改apache配置文件之前需要备份原有的配置文件夹conf,这是网站架设的好习惯.以下的apache配置调优均是在red had的环境下进行的. httpd相关 ...
- win 10应用商店下载应用错误码0x80070422
Win10应用商店下载应用提示错误0x80070422怎么办? 一些安装了Win10系统的朋友们在使用过程中发现,在使用WIn8应用商店下载免费应用的时候,系统提示:错误0x80070422,这是怎么 ...
- JS七种加密解密方法
http://www.cnblogs.com/mq0036/p/4983858.html HTML或JS加密解密 本文一共介绍了七种方法: 一:最简单的加密解密 二:转义字符"\&q ...
- Ext.Net学习笔记03:Ext.Net MessageBus用法
发布和订阅消息 Ext.Net MessageBus 的本质是一个消息订阅机制,ExtJS中没有这种机制,所以MessageBus的Ext.Net实现的,但并不是原创,这种功能在dojo中早就实现了, ...
- 游标、type使用示例
declare my_cur sys_refcursor; --定义游标变量 type v_record is record( --定义 record类型 obj_id number, ...