专栏首页Jerry的SAP技术分享如何在ABAP里用函数式编程思想打印出非波拉契Fibonacci(数列)
原创

如何在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的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

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

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

    Jerry Wang
  • 使用ABAP内表作为数据结构实现非波拉契数列(fibonacci)的生成

    Jerry Wang
  • SAP Spartacus header区域布局设计

    从渲染后生成的原生HTML能看出,header标签页下面有两个cx-page-layout, section属性分别为header和navigation:

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

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

    Jerry Wang
  • 使用ABAP内表作为数据结构实现非波拉契数列(fibonacci)的生成

    Jerry Wang
  • 杀死进程

    按大写O再按k再敲回车,然后使用R就可以以cpu占用量进行查看了!下面贴出top的技巧命令:

    一滴水的眼泪
  • 散装记录之如何单独使用modelsim进行仿真

    无独有偶,这两天都遇到了只能用modelsim进行仿真的要求,事情虽小,但是觉得还是要记录一下的,所以在此记录一下如何单独使用modelsim进行verilog...

    根究FPGA
  • 如何简单写yarn app

    尽管YARN自带的编程API已经得到了极大的简化,但从头开发一个YARN应用程序仍是一件非常困难的事情。在YARN上编写一个应用程序,你需要开发Client和A...

    Spark学习技巧
  • 14.【Kevin聊敏捷】敏捷项目管理之Scrum Events 敏捷活动

    一个迭代周期要小于30天,现在最流行的迭代时间是两周。主要是为了开发一个潜在可用的可发版的产品增量。迭代周期是固定的,不能说这一次的这一次的迭代周期是3周,下次...

    开心的Kevin
  • Python 技术篇-3行代码实现语音朗读,pywin32库实现语音朗读

    小蓝枣

扫码关注云+社区

领取腾讯云代金券