如何在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 = 0THEN VALUE #( ( |0| ) )WHEN n = 1THEN 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的原創技術文章,請關注公眾號"汪子熙"或者掃描下面二維碼:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2213409/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用JavaScriptES6的新特性計算Fibonacci(非波拉契數列)JavaScript
- 使用JavaScript ES6的新特性計算Fibonacci(非波拉契數列)JavaScript
- 基於C語言用遞迴思想實現斐波那契數列的函式設計C語言遞迴函式
- [scala]函數語言程式設計思想入門函數程式設計
- JS尾遞迴優化斐波拉契數列JS遞迴優化
- 用閉包替換遞迴實現斐波拉契數列遞迴
- JavaScript函數語言程式設計(1):基本思想JavaScript函數程式設計
- C#函數語言程式設計思想及案例C#函數程式設計
- 斐波那契數列(Fibonacci)遞迴和非遞迴實現遞迴
- 設計一個程式,列印出1-200之間的斐波那契數列
- 函數語言程式設計函數程式設計
- Scala 函數語言程式設計(一) 什麼是函數語言程式設計?函數程式設計
- JDK 7中的函數語言程式設計思想[轉載]JDK函數程式設計
- python中用遞迴的方法實現斐波拉契數列Python遞迴
- 程式設計思想基本概念之函數語言程式設計(Functional Programming)程式設計函數Function
- 函數語言程式設計,真香函數程式設計
- Java 函數語言程式設計Java函數程式設計
- javascript函數語言程式設計JavaScript函數程式設計
- 初探函數語言程式設計函數程式設計
- 函數語言程式設計初探函數程式設計
- JavaScript 函數語言程式設計JavaScript函數程式設計
- JavaScript函數語言程式設計之為什麼要函數語言程式設計(非嚴謹技術層面的扯淡)JavaScript函數程式設計
- 斐波那契數列 多語言實現 筆記筆記
- Java8函數語言程式設計應用Java函數程式設計
- 函數語言程式設計實用介紹(下)函數程式設計
- 函數語言程式設計實用介紹(上)函數程式設計
- 高考數學常用數學思想:函式與方程思想,在數列中的應用函式
- 函數語言程式設計雜談函數程式設計
- 初見函數語言程式設計函數程式設計
- RAC的函數語言程式設計函數程式設計
- JavaScript 函數語言程式設計(二)JavaScript函數程式設計
- 函數語言程式設計前菜函數程式設計
- JavaScript 函數語言程式設計(一)JavaScript函數程式設計
- JavaScript 函數語言程式設計(三)JavaScript函數程式設計
- python函數語言程式設計Python函數程式設計
- JavaScript函數語言程式設計(二)JavaScript函數程式設計
- JavaScript函數語言程式設計(一)JavaScript函數程式設計
- JavaScript函數語言程式設計(三)JavaScript函數程式設計