使用并发计算数字阶乘的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