`
JerryWang_SAP
  • 浏览: 1030603 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

如何在ABAP里用函数式编程思想打印出非波拉契Fibonacci(数列)

阅读更多

在JavaScript里可以用ES6提供的FunctionGenerator这种黑科技来打印非波拉契数列,具体细节参考我这篇文章

在ABAP里也有很多种方式实现这个需求。

下面这个report分别用递归和ABAP internal table的方式实现了非波拉契数列的打印。

REPORT Z_FIBO.

PARAMETERS: N type i,

v1 RADIOBUTTON GROUP v default 'X',

v2 RADIOBUTTON GROUP v.

data: f type i,

t type i.

data: product_guid type comm_product-product_guid.

get run time field t.

case 'X'.

when v1\. perform fibonacci using n changing f.

when v2\. perform fibonacci_2 using n changing f.

endcase.

write: / 'Fibonacci(', n, ') =', f.

get run time field t.

write: / 'Runtime', t, 'microseconds'.

*&---------------------------------------------------------------------*

*& Form fibonacci

*&---------------------------------------------------------------------*

form fibonacci using in type i

changing fib type i.

data: f_1 type i, f_2 type i,

n_1 type i, n_2 type i.

case in.

when 0\. fib = 1.

when 1\. fib = 1.

when others.

n_1 = in - 1.

n_2 = in - 2.

perform fibonacci using n_1 changing f_1.

perform fibonacci using n_2 changing f_2.

fib = f_1 + f_2.

endcase.

endform. "fibonacci

*&---------------------------------------------------------------------*

*& Form fibonacci_2

*&---------------------------------------------------------------------*

form fibonacci_2 using in type i

changing fib type i.

data: f_1 type i, f_2 type i,

n_1 type i, n_2 type i,

l type i.

data: fibo type table of i.

append 1 to fibo. " fibonacci(0)

append 1 to fibo. " fibonacci(1)

n_1 = 1.

n_2 = 2.

l = in - 1.

do l times.

read table fibo index n_1 into f_1.

read table fibo index n_2 into f_2.

fib = f_1 + f_2.

add 1 to n_1\. add 1 to n_2.

append fib to fibo.

enddo.

endform. "fibonacci_2
 

以上两种解决方案相对来说都比较传统,再来看看使用ABAP 7.40提供的新关键字COND实现的非波拉契数列打印:

REPORT z.

CLASS lcl_fibonacci DEFINITION.

PUBLIC SECTION.

TYPES: zint_tab TYPE TABLE OF int4 WITH EMPTY KEY.

METHODS fibonacci

IMPORTING !n TYPE i RETURNING VALUE(fib_numbers) TYPE zint_tab.

ENDCLASS.

CLASS lcl_fibonacci IMPLEMENTATION.

METHOD fibonacci.

fib_numbers = COND #( WHEN n = 0

THEN VALUE #( ( |0| ) )

WHEN n = 1

THEN VALUE #( ( |0| ) ( |1| ) )

ELSE

VALUE #( LET fn1 = fibonacci( n - 1 )

x = fn1[ lines( fn1 ) ]

y = fn1[ lines( fn1 ) - 1 ]

IN ( LINES OF fn1 ) ( x + y ) ) ).

ENDMETHOD.

ENDCLASS.

START-OF-SELECTION.

cl_demo_output=>display( NEW lcl_fibonacci( )->fibonacci( 10 ) ).
 

打印输出:

 

要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

 

 
 
0
0
分享到:
评论

相关推荐

    SAP变式配置-相关性程序如何调用ABAP函数[参照].pdf

    SAP变式配置-相关性程序如何调用ABAP函数 SAP变式配置是一种复杂的系统配置,相关性程序是其中的一部分,主要用于实现一些简单的逻辑判断。然而,对于一些负责的算法,相关性程序无法直接实现,需要通过调用ABAP...

    abap 函数大全 abap function

    在SAP环境中,ABAP函数模块是ABAP编程的重要组成部分,它们提供了预定义的功能,允许开发者以模块化的方式实现特定的业务逻辑。 在“ABAP 函数大全”中,我们可以看到对各种ABAP函数模块的详细描述和用法。这些函数...

    ABAP编程常用函数

    在ABAP编程中,了解和熟练使用系统变量与函数对于编写高效、简洁的代码至关重要。以下是一些在ABAP编程中常见的系统变量和函数的详细解释: 系统变量: 1. `SY-PAGNO`: 该变量存储当前报表的页号,用于在处理多页...

    ABAP 常用函数总结

    本文总结了 ABAP 中常用的函数,包括日期计算、表操作、数据转换、权限检查、报表生成、PDF 转换、日期转换、浮点数转换、搜索帮助、预留、维护视图调用、写列表下载、工厂日历、物料 ATP 数量、进度指示器、下拉...

    ABAP 函数介绍

    在 ABAP 中,异步调用可以使用 CALL FUNCTION 语句实现,例如: ```abap CALL FUNCTION 'ZSD_ZK03' IN UPDATE TASK. ``` 这条语句将异步调用 ZSD_ZK03 函数模块,并在 Commit Work 语句执行后执行。 1.1 本地异步...

    ABAP调用函数自动填充模式

    在SAP ABAP编程环境中,开发人员经常需要调用各种函数模块来实现特定的功能。"ABAP调用函数自动填充模式"是一种提高开发效率的工具,它允许在编写代码时快速填充函数调用的参数,并自动声明对应的变量。这个功能在...

    abap编程常用函数

    ABAP编程常用函数 ABAP是SAP公司开发的一种高级编程语言,用于开发SAP R/3系统中的应用程序。ABAP语言提供了大量的内置函数,能够帮助开发者快速实现各种业务逻辑。下面是ABAP编程中常用的函数: 1. SD_VBAP_READ_...

    sap-abap打印条码教程

    SAP-ABAP打印条码教程是一个详细的教学指南,旨在指导开发者如何使用SAP-ABAP语言创建自定义的打印条码收藏在Smartforms中。本教程将从基本概念开始,介绍条码的定义、应用场景、打印条码软件、打印机和扫描器等,...

    ABAP351高级编程-动态编程.rar

    1. **Dynamic Statements**: 在ABAP中,可以使用`EXEC SQL`或`CALL FUNCTION`动态执行SQL查询或调用函数模块。这在处理未知结构或需要根据运行时条件改变行为时非常有用。 2. **Data Types at Runtime**: 动态数据...

    SAP ABAP 时间函数.docx

    这些函数在实际编程中可以根据需求灵活选择。例如,如果你需要处理用户输入的日期,`LAST_DAY_OF_MONTHS`和`RP_LAST_DAY_OF_MONTHS`可能是更好的选择,因为它们直接接受字符串类型的日期。而如果你正在处理已知的...

    ABAP常用函数集锦

    4. **DY_GET_FOCUS**和**DY_GET_SET_FIELD_VALUE**: 这两个函数分别用于获取和设置屏幕字段的焦点和值,它们在GUI交互式编程中常见,例如在用户输入验证或自动填充字段时。 5. **F4IF_INT_TABLE_VALUE_REQUEST**:...

    abap负号前置 函数

    在ABAP(Advanced Business Application Programming)编程中,"负号前置"是一种常见的操作,尤其是在处理数值数据时。这个操作涉及到将数值表示中的负号从数的末尾移动到开头,以便符合数学上负数的标准书写格式。...

    ABAP函数讲解系列

    总的来说,“ABAP函数讲解系列”涵盖了ABAP编程的多个关键领域,从基础的函数使用到高级的动态编程,对于任何希望在SAP环境中工作的开发者来说,都是极其宝贵的资源。通过深入学习和实践,你可以掌握编写高效、可...

    abap 屏幕编程教程

    ABAP 屏幕编程是 SAP 系统中的一种编程技术,用于创建交互式屏幕,以便用户可以与 SAP 系统进行交互。ABAP 屏幕编程教程旨在为开发者提供详细的指南,帮助他们快速掌握 ABAP 屏幕编程的技术。 第一部分:ABAP 屏幕...

    ABAP批量打印程序

    ### ABAP批量打印程序解析与知识点详解 #### 核心概念与功能介绍 **ABAP**(Advanced Business Application Programming)是SAP系统的核心编程语言,广泛应用于业务流程开发、报表生成等场景。本篇将深入解析一个...

    sap abap日期类函数参考

    日期类函数在 ABAP 中扮演着至关重要的角色,帮助程序员进行格式转换、比较和计算日期。以下是一些常用的 SAP ABAP 日期函数及其用法。 1. `CONVERSION_EXIT_IDATE_OUTPUT` 这个函数将内部日期格式(如 '20080203'...

    ABAP日期函数(求月末日,第几周,search help 只显示年月) 使用方法实例

    ABAP 日期函数使用方法实例 ABAP 日期函数是 SAP 系统中用于处理日期和时间的函数集合。在实际应用中,日期函数的使用非常广泛,例如计算两个日期间的工作天数、获取当前月份的第一天和最后一天、计算日期所在的...

    ABAP2XLSX+封装EXCEL 打印的公用类

    在"ABAP2XLSX+封装EXCEL 打印的公用类"的场景中,我们可能涉及到的是一个专门设计的公共类(ZCL_COMMON),它利用了ABAP2XLSX的功能,并进一步封装了生成和打印Excel文件的逻辑,以便在不同的业务场景下重复使用。...

Global site tag (gtag.js) - Google Analytics