使用併發計算數字階乘的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例程和通道以及遞迴。

更新於:2023年8月4日

瀏覽量:354

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告