日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

功能与命令式编程。 Java 8中的斐波那契,素数和阶乘

發布時間:2023/12/3 java 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 功能与命令式编程。 Java 8中的斐波那契,素数和阶乘 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

有多種編程風格/范例,但是兩種著名的風格是Imperative和Functional 。

命令式編程是最主要的范例,因為幾乎所有主流語言(C ++,Java,C#)都在推廣它。 但是在最近幾年中,函數式編程開始受到關注。 主要驅動因素之一是,僅所有新計算機都帶有4、8、16或更多核,并且以命令式方式編寫并行程序以利用所有核非常困難。 功能風格將這種困難轉移到了運行時級別,并使開發人員擺脫了繁瑣且容易出錯的工作。

等待! 那么這兩種樣式有什么區別。

命令式編程是一種范例,您可以在其中說明如何準確地執行機器/運行時語句以及應該執行哪些準確的語句以達到所需的結果。

函數式編程是聲明性編程范式的一種形式,您可以在其中聲明要實現的目標,而機器/運行時將確定最佳的實現方式。

功能風格將方式部分移至運行時級別,并幫助開發人員專注于一部分。 通過抽象如何部分我們可以寫出更好的可維護性和可擴展的軟件。

為了應對多核計算機帶來的挑戰并保持對開發人員的吸引力, Java 8引入了緊隨其后的功能范式。

有足夠的理論,讓我們使用Java來實現命令式和函數式編程中的幾個編程難題,然后看看它們之間的區別。

斐波那契數列命令式與功能性 (斐波那契數列是數字的序列:1、1、2、3、5、8、13、21、34,…。下一個數字是通過將前面的兩個數字相加而得出的。)

斐波那契數列的迭代式和命令式

public static int fibonacci(int number) {int fib1 = 1;int fib2 = 1;int fibonacci = fib1;for (int i = 2; i < number; i++) {fibonacci = fib1 + fib2;fib1 = fib2;fib2 = fibonacci;}return fibonacci; }for(int i = 1; i <= 10; i++) {System.out.print(fibonacci(i) +" "); } // Output: 1 1 2 3 5 8 13 21 34 55

正如你可以在這里看到我們的重點是如何 (迭代狀態)很多,而這正是我們想要實現的。

斐波那契數列的迭代式和函數式

IntStream fibonacciStream = Stream.iterate(new int[]{1, 1},fib -> new int[] {fib[1], fib[0] + fib[1]}).mapToInt(fib -> fib[0]);fibonacciStream.limit(10).forEach(fib -> System.out.print(fib + " ")); // Output: 1 1 2 3 5 8 13 21 34 55

相反,你可以在這里看到我們的重點是我們要達到的目標 。

質數命令式與功能性素數(質數是大于1的自然數,除1本身以外沒有正除數。)

命令式素數

public boolean isPrime(long number) { for(long i = 2; i <= Math.sqrt(number); i++) { if(number % i == 0) return false; } return number > 1; } isPrime(9220000000000000039L) // Output: true

再次,我們在此重點關注如何 (迭代,狀態)。

功能風格的素數

public boolean isPrime(long number) { return number > 1 && LongStream.rangeClosed(2, (long) Math.sqrt(number)) .noneMatch(index -> number % index == 0); } isPrime(9220000000000000039L) // Output: true

在這里我們再次的重點是我們要達到的目標 。 函數式樣式幫助我們抽象出了在數字范圍內進行顯式迭代的過程。

您現在可能會想,嗯,這就是我們所能擁有的一切……。 ? 讓我們看看如何以功能風格使用所有核心(獲得并行性)。

public boolean isPrime(long number) { return number > 1 && LongStream.rangeClosed(2, (long) Math.sqrt(number)).parallel() .noneMatch(index -> number % index == 0); } isPrime(9220000000000000039L) // Output: true

而已! 我們只是將.parallel()添加到流中。 您可以看到庫/運行時如何為我們處理復雜性。

階乘命令式與函數式 (n的階乘是所有小于或等于n的正整數的乘積。)

迭代式和命令式的階乘

public long factorial(int n) {long product = 1;for ( int i = 1; i <= n; i++ ) {product *= i;}return product; } factorial(5) // Output: 120

迭代和功能風格的階乘

public long factorial(int n) {return LongStream.rangeClosed(1, n).reduce((a, b) -> a * b).getAsLong(); } factorial(5) // Output: 120

值得重申的是通過抽象如何部分我們可以寫出更好的可維護性和可擴展的軟件。

要查看Java 8引入的所有功能特性,請查看以下Lambda表達式,方法參考和流指南。

翻譯自: https://www.javacodegeeks.com/2015/12/functional-vs-imperative-programming-fibonacci-prime-factorial-java-8.html

總結

以上是生活随笔為你收集整理的功能与命令式编程。 Java 8中的斐波那契,素数和阶乘的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。