如何在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語言遞迴函式
- 設計一個程式,列印出1-200之間的斐波那契數列
- fibonacci斐波那契數列詳解 遞迴求Fn非遞迴求Fn求n最近的斐波那契數遞迴
- 【演算法】Fibonacci(斐波那契數列)相關問題演算法
- 斐波那契數列 多語言實現 筆記筆記
- 斐波那契數列
- JavaScript函數語言程式設計(1):基本思想JavaScript函數程式設計
- JS尾遞迴優化斐波拉契數列JS遞迴優化
- 用閉包替換遞迴實現斐波拉契數列遞迴
- Fibonacci數列
- 斐波那契數列(Java)Java
- 函數語言程式設計函數程式設計
- 斐波那契數列三種實現函式函式
- rust實戰系列 - 使用Iterator 迭代器實現斐波那契數列(Fibonacci )Rust
- python中用遞迴的方法實現斐波拉契數列Python遞迴
- Scala 函數語言程式設計(一) 什麼是函數語言程式設計?函數程式設計
- 斐波那契數列 (C#)C#
- PHP 與斐波那契數列PHP
- 斐波那契數列詳解
- 著名的斐波那契數列
- 如何將斐波那契數列應用到排版設計中
- JavaScript函數語言程式設計之為什麼要函數語言程式設計(非嚴謹技術層面的扯淡)JavaScript函數程式設計
- 函數語言程式設計,真香函數程式設計
- python函數語言程式設計Python函數程式設計
- javascript函數語言程式設計JavaScript函數程式設計
- JavaScript 函數語言程式設計JavaScript函數程式設計
- Java 函數語言程式設計Java函數程式設計
- 斐波那契數列的來源——數兔子
- 斐波那契數列數與等冪和
- js實現斐波那契數列JS
- 斐波那契數列演算法演算法
- 裴波那契數列(javascript實現)JavaScript
- 第十題:斐波那契數列
- [C103] 斐波那契數列
- 力扣之斐波那契數列力扣
- 劍指offer——斐波那契數列