标签:text clear 排序 tar time index line desc 算法
*&---------------------------------------------------------------------*
*& Report zabc
*& 循环+栈
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zabc.
TYPES BEGIN OF ty_num.
TYPES num TYPE i.
TYPES END OF ty_num.
DATA gt_num TYPE TABLE OF ty_num.
DATA gt_stack TYPE TABLE OF ty_num.
DATA gv_target_num TYPE i VALUE 10.
PERFORM frm_initialize."可以任意数字组合
SORT gt_num BY num."算法优化,务必排序。
PERFORM lookup.
*&---------------------------------------------------------------------*
*& Form frm_initialize
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_initialize.
DATA ls_num TYPE ty_num.
DO 2 TIMES.
ls_num-num = sy-index.
APPEND ls_num TO gt_num.
ENDDO.
ENDFORM. "frm_initialize
*&---------------------------------------------------------------------*
*& Form lookup
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->SY-TABIX text
*----------------------------------------------------------------------*
FORM lookup.
DATA ls_num TYPE ty_num.
LOOP AT gt_num INTO ls_num.
PERFORM push USING ls_num.
DATA lv_num TYPE i.
PERFORM get_count USING lv_num."取组合中数字的累计值
IF lv_num = gv_target_num.
PERFORM write.
ENDIF.
IF lv_num > gv_target_num ."组合值大于目标值,不用再递归,因为值越加越大
ELSE.
PERFORM lookup.
ENDIF.
PERFORM popup.
ENDLOOP.
ENDFORM. "recurs
*&---------------------------------------------------------------------*
*& Form push
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PS_NUM text
*----------------------------------------------------------------------*
FORM push USING ps_num.
APPEND ps_num TO gt_stack.
ENDFORM. "push
*&---------------------------------------------------------------------*
*& Form write
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM write.
FIELD-SYMBOLS <ls_num> TYPE ty_num.
LOOP AT gt_stack ASSIGNING <ls_num>.
AT FIRST.
WRITE: / <ls_num>-num.
CONTINUE.
ENDAT.
WRITE <ls_num>-num.
ENDLOOP.
ENDFORM. "write
*&---------------------------------------------------------------------*
*& Form popup
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM popup.
DATA lv_lines TYPE i.
DESCRIBE TABLE gt_stack LINES lv_lines.
DELETE gt_stack INDEX lv_lines.
ENDFORM. "popup
*&---------------------------------------------------------------------*
*& Form GET_COUNT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_count USING pv_num.
FIELD-SYMBOLS <ls_num> TYPE ty_num.
CLEAR pv_num..
LOOP AT gt_stack ASSIGNING <ls_num>.
pv_num = pv_num + <ls_num>-num.
ENDLOOP.
ENDFORM. " GET_COUNT
标签:text clear 排序 tar time index line desc 算法
原文地址:https://www.cnblogs.com/sap-George/p/13553209.html