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

发布时间:2019-08-12 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了如何在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里用函数式编程思想打印出非波拉契Fibonacci(数列)

以上两种解决方案相对来说都比较传统,再来看看使用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 ) ).

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

打印输出:

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

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

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

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

脚本宝典总结

以上是脚本宝典为你收集整理的如何在ABAP里用函数式编程思想打印出非波拉契Fibonacci(数列)全部内容,希望文章能够帮你解决如何在ABAP里用函数式编程思想打印出非波拉契Fibonacci(数列)所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。