使用併發計算數字階乘的Go語言程式
在本文中,我們將編寫Go語言程式,使用併發計算數字的階乘。這是一個同時執行多個操作的任務,可以使用Go例程和通道來實現。Go例程是輕量級執行緒,通道有助於例程之間進行無衝突的通訊。
語法
func make ([] type, size, capacity)
Go語言中的`make`函式用於建立陣列/對映,它接受要建立的變數型別、大小和容量作為引數。
演算法
此程式匯入必要的包`main`和`fmt`。
在此步驟中,定義函式`factorial_number`,它接受型別為`uint64`的輸入引數`n`和型別為`chan uint64`的通道`ch`。
然後,建立一個名為`factorial_number`的函式來計算數字的階乘。
然後,將型別為`uint64`的變數`fact`初始化為1。
然後,使用for迴圈從2迴圈到`i`達到`n`。在每次迭代中,將`fact`乘以`i`。
然後,將儲存在`fact`中的計算出的階乘值傳送到通道`ch`。
建立一個`main`函式。
在`main`函式中,首先設定要計算階乘的數字。
在此步驟中,使用內建函式`make`建立一個型別為`chan uint64`的通道`ch`。
然後,啟動一個Go例程來計算階乘,使用數字和`ch`作為引數呼叫函式`factorial_number`。
然後,從通道讀取計算出的階乘,並將其儲存在變數`fact`中。
最後,使用`Printf`函式和`%d`來列印數值輸出到控制檯。
示例1
在這個例子中,我們將編寫一個Go語言程式,使用Go例程和通道來計算數字的階乘,從而並行執行該過程。
package main
import (
"fmt"
)
func factorial_number(n uint64, ch chan uint64) {
fact := uint64(1)
for i := uint64(2); i <= n; i++ {
fact *= i
}
ch <- fact
}
func main() {
number := uint64(6)
ch := make(chan uint64)
go factorial_number(number, ch)
fact := <-ch
fmt.Printf("Factorial of %d is: %d\n", number, fact)
}
輸出
Factorial of 6 is : 720
示例2
在這個例子中,我們將編寫一個Go語言程式,使用遞迴技術結合Go例程和通道來計算數字的階乘。
package main
import (
"fmt"
)
func factorial_number(n uint64, ch chan uint64) {
if n == 0 {
ch <- 1
return
}
fact := n
for i := n - 1; i > 0; i-- {
fact *= i
}
ch <- fact
}
func main() {
number := uint64(8)
ch := make(chan uint64)
go factorial_number(number, ch)
fact := <-ch
fmt.Printf("Factorial of %d is: %d\n", number, fact)
}
輸出
Factorial of 8 is: 40320
結論
我們編譯並執行了使用兩個示例計算數字階乘的程式。在第一個示例中,我們使用了Go例程和通道;在第二個示例中,我們使用了這些Go例程和通道以及遞迴。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP