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

如何在ABAP里用函数式编程思想打印出非波拉契Fibonacci(数列)的更多相关文章

  1. Scala 函数式编程思想

    Spark 选择 Scala 作为开发语言 在 Spark 诞生之初,就有人诟病为什么 AMP 实验室选了一个如此小众的语言 - Scala,很多人还将原因归结为学院派的高冷,但后来事实证明,选择 S ...

  2. 函数式编程思想概述和冗余的Runnable代码

    函数式编程思想概述 在数学中,函数就是有输入量.输出量的一套计算方法 相对而言,面向对象过分强调必须通过对象的形式来做事情,而函数式的思想是尽量忽略复杂的面向对象的复杂语法--是强调做什么而不是以什么 ...

  3. 剑指offer19:按照从外向里以顺时针的顺序依次打印出每一个数字,4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

    1 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印 ...

  4. JDK 7中的函数式编程思想[转载]

    原文作者的观点是Lambda表达式一定会包含在JDK 7中,而全文也着重介绍了这方面的知识,作者认为函数式编程的概念也将出现在JDK 7中. Lambda表达式 Lambda表达式并不是什么新概念,自 ...

  5. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第6节 Lambda表达式_1_函数式编程思想概述

    函数式编程和面向对象的区别

  6. iOS 开发之函数式编程思想(Functional Programming)

    函数式编程(Functional Programming), 函数式编程强调的函数:1.不依赖外部状态:2.不改变外部状态. 函数式编程可解决线程安全问题,每一个函数都是线程安全的. 时间状态:变量一 ...

  7. laravel中closure和curry 科里化函数式编程

    推荐值得的一看博客文档:谢谢作者  : https://my.oschina.net/zhmsong 函数式编程curry的概念: 只传递给函数一部分参数来调用函数,然后返回一个函数去处理剩下的参数. ...

  8. JavaScript之函数式编程思想初探

    //result = 3*x + 5; var Mul3 = function(x){ return 3*x; } var Add5 = function(x){ return x + 5; } va ...

  9. Python3 编程第一步_斐波纳契数列_连续赋值

    # Fibonacci series: 斐波纳契数列 # 两个元素的总和确定了下一个数 a, b = 0, 1 while b < 10: print(b) a, b = b, a+b # 1 ...

随机推荐

  1. TypeScript完全解读(26课时)_3.TypeScript完全解读-Symbol

    ts中symbol的支持是按照es6的标准来的,只要我们学会es6中的symbol,就可以直接在ts中使用了 创建symbol 在example文件夹下新建symbol.ts 然后在根目录的index ...

  2. msql 初识数据库

    一 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中, 毫无疑问, 一个文件仅仅只能存在于某一台机器上. 如果我们暂且忽略直接基于文件来存取数据的效率问题, 并且假设程序所有 ...

  3. myeclipse 2014 没有Install New Software的解决办法

    要安装离线zip包,但在myeclipse2014的help菜单中找不到 Install New Software 解决如下: help--install from site--add--archiv ...

  4. Codeforces 749C【模拟】

    FST的时候好像挂了挺多人的~ 其实思路没啥难的,就是更好地理解题意吧,1到n一直循环,直到没有人能vote,一个人能vote也能叉掉一个人,一个人被叉就不能vote,判谁赢. 其实我管vote干嘛, ...

  5. Lightoj1011【KM算法】

    题意: 问男孩女孩最大的可能值?其实就是一个二分图的最大权值匹配问题:模板题吧.. #include<cstdio> #include<math.h> #include< ...

  6. Mecanim动画系统 - 在角色上使用Mask 叠加动画层

    http://www.narkii.com/club/thread-305706-1.html 2013-10-9 01:15 上传 下载附件 (78.65 KB) 导读:五分钟了解Mecanim角色 ...

  7. java数据结构----哈希表

    1.哈希表:它是一种数据结构,可以提供快速的插入操作和查找操作.如果哈希表中有多少数据项,插入和删除操作只需要接近常量的时间.即O(1)的时间级.在计算机中如果需要一秒内查找上千条记录,通常使用哈希表 ...

  8. java操作mongodb数据库实现新建数据库,新建集合,新建文档

    *首先明确一点,要通过java代码创建mongodb数据库实例,需要同时创建集合和文档. 代码实现: /* 建立与mongodb数据库的连接,可指定参数,如:MongoClient client = ...

  9. 通过configmap更新k8s里的mysql配置文件

    背景: 环境注意:在用rancher搭建的k8s里,mysql是起了一个pod,镜像是网上的mysql:5.7 开发人员提出了一个报错“查询时的ONLY_FULL_GROUP_BY错误”,让我改sql ...

  10. 最耗资源的10条sql

    ----当前最耗资源的10个cpu select * from (select address,hash_value, round(cpu_time/1000000) cpu_time_s, roun ...