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

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.