在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的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:
相关推荐
SAP变式配置-相关性程序如何调用ABAP函数 SAP变式配置是一种复杂的系统配置,相关性程序是其中的一部分,主要用于实现一些简单的逻辑判断。然而,对于一些负责的算法,相关性程序无法直接实现,需要通过调用ABAP...
在SAP环境中,ABAP函数模块是ABAP编程的重要组成部分,它们提供了预定义的功能,允许开发者以模块化的方式实现特定的业务逻辑。 在“ABAP 函数大全”中,我们可以看到对各种ABAP函数模块的详细描述和用法。这些函数...
在ABAP编程中,了解和熟练使用系统变量与函数对于编写高效、简洁的代码至关重要。以下是一些在ABAP编程中常见的系统变量和函数的详细解释: 系统变量: 1. `SY-PAGNO`: 该变量存储当前报表的页号,用于在处理多页...
本文总结了 ABAP 中常用的函数,包括日期计算、表操作、数据转换、权限检查、报表生成、PDF 转换、日期转换、浮点数转换、搜索帮助、预留、维护视图调用、写列表下载、工厂日历、物料 ATP 数量、进度指示器、下拉...
在 ABAP 中,异步调用可以使用 CALL FUNCTION 语句实现,例如: ```abap CALL FUNCTION 'ZSD_ZK03' IN UPDATE TASK. ``` 这条语句将异步调用 ZSD_ZK03 函数模块,并在 Commit Work 语句执行后执行。 1.1 本地异步...
在SAP ABAP编程环境中,开发人员经常需要调用各种函数模块来实现特定的功能。"ABAP调用函数自动填充模式"是一种提高开发效率的工具,它允许在编写代码时快速填充函数调用的参数,并自动声明对应的变量。这个功能在...
ABAP编程常用函数 ABAP是SAP公司开发的一种高级编程语言,用于开发SAP R/3系统中的应用程序。ABAP语言提供了大量的内置函数,能够帮助开发者快速实现各种业务逻辑。下面是ABAP编程中常用的函数: 1. SD_VBAP_READ_...
SAP-ABAP打印条码教程是一个详细的教学指南,旨在指导开发者如何使用SAP-ABAP语言创建自定义的打印条码收藏在Smartforms中。本教程将从基本概念开始,介绍条码的定义、应用场景、打印条码软件、打印机和扫描器等,...
1. **Dynamic Statements**: 在ABAP中,可以使用`EXEC SQL`或`CALL FUNCTION`动态执行SQL查询或调用函数模块。这在处理未知结构或需要根据运行时条件改变行为时非常有用。 2. **Data Types at Runtime**: 动态数据...
这些函数在实际编程中可以根据需求灵活选择。例如,如果你需要处理用户输入的日期,`LAST_DAY_OF_MONTHS`和`RP_LAST_DAY_OF_MONTHS`可能是更好的选择,因为它们直接接受字符串类型的日期。而如果你正在处理已知的...
4. **DY_GET_FOCUS**和**DY_GET_SET_FIELD_VALUE**: 这两个函数分别用于获取和设置屏幕字段的焦点和值,它们在GUI交互式编程中常见,例如在用户输入验证或自动填充字段时。 5. **F4IF_INT_TABLE_VALUE_REQUEST**:...
在ABAP(Advanced Business Application Programming)编程中,"负号前置"是一种常见的操作,尤其是在处理数值数据时。这个操作涉及到将数值表示中的负号从数的末尾移动到开头,以便符合数学上负数的标准书写格式。...
总的来说,“ABAP函数讲解系列”涵盖了ABAP编程的多个关键领域,从基础的函数使用到高级的动态编程,对于任何希望在SAP环境中工作的开发者来说,都是极其宝贵的资源。通过深入学习和实践,你可以掌握编写高效、可...
ABAP 屏幕编程是 SAP 系统中的一种编程技术,用于创建交互式屏幕,以便用户可以与 SAP 系统进行交互。ABAP 屏幕编程教程旨在为开发者提供详细的指南,帮助他们快速掌握 ABAP 屏幕编程的技术。 第一部分:ABAP 屏幕...
### ABAP批量打印程序解析与知识点详解 #### 核心概念与功能介绍 **ABAP**(Advanced Business Application Programming)是SAP系统的核心编程语言,广泛应用于业务流程开发、报表生成等场景。本篇将深入解析一个...
日期类函数在 ABAP 中扮演着至关重要的角色,帮助程序员进行格式转换、比较和计算日期。以下是一些常用的 SAP ABAP 日期函数及其用法。 1. `CONVERSION_EXIT_IDATE_OUTPUT` 这个函数将内部日期格式(如 '20080203'...
ABAP 日期函数使用方法实例 ABAP 日期函数是 SAP 系统中用于处理日期和时间的函数集合。在实际应用中,日期函数的使用非常广泛,例如计算两个日期间的工作天数、获取当前月份的第一天和最后一天、计算日期所在的...
在"ABAP2XLSX+封装EXCEL 打印的公用类"的场景中,我们可能涉及到的是一个专门设计的公共类(ZCL_COMMON),它利用了ABAP2XLSX的功能,并进一步封装了生成和打印Excel文件的逻辑,以便在不同的业务场景下重复使用。...