Golang实例 - 求一个数的阶乘

868 阅读1分钟

这篇博文涉及两个计算数字阶乘的程序

  • 使用递归函数
  • 使用迭代函数

数字n的阶乘被称为n!等于所有小于或等于n的整数的乘积。一个数字的阶乘=0就是1。

例如,5的阶乘等于5!=5*4*3*2*1。

n=n的阶乘!=1*2*3*4*...n

要理解这个例子,你应该具备Go语言的以下特点

使用迭代函数求一个数字的阶乘的程序示例

在下面的程序中,使用Scanln函数从用户键盘上获取输入,并将其存储在数字变量中

宣告函数 - IterativeFactorial,输入参数为类型,返回类型为uint64,计算一个给定数字的阶乘。

在 IterativeFactorial 函数中,我们使用 for 循环来迭代从 1 到数字的所有数字,并且每个迭代的数字的乘积都存储在变量 result 中。

在这里,为了存储结果,使用了uint64数据类型,它是无符号的64位整数,数值范围从0到2的64-1次方。

这将被用来存储阶乘计算结果的较大数字。

结果返回给主函数

最后使用Println函数将结果打印到控制台。

package main  
  
import (  
 "fmt"  
)  
  
func IterativeFactorial(number int) uint64 {  
 var result uint64 = 1  
 if number < 0 {  
  
 } else {  
  for i := 1; i <= number; i++ {  
   result *= uint64(i)  
  
  }  
 }  
 return result  
}  
func main() {  
 var number int  
 fmt.Print("Enter Number:")  
 fmt.Scanln(&number)  
 fmt.Printf("Factorial of %d = %d", number, IterativeFactorial(number))  
}  

当上述程序被执行时,其输出为

Enter Number:5  
Factorial of 5 = 120  
  
Enter Number:6  
Factorial of 6 = 720  

示例程序 2 - 递归函数计算一个数字的阶乘

首先,使用Scanln函数从用户控制台读取数字并存储到变量number中。
宣告递归函数 RecursiveFactorial,递归函数是在同一函数内调用的函数。

例如,如果提供的输入数字是 5,递归函数的工作方式如下

最初,RecursiveFactorial(5)被从主函数中调用。
在一个函数中,5大于等于1,5是RecursiveFactorial(4)的倍数。这在同一个函数中被调用,称为递归函数
在每次递归调用中,数字值被递减1并执行,直到它达到1为止

当数字为1时,它返回1,而不需要递归调用
在这行代码中,返回uint64(number) * RecursiveFactorial(number-1),如果int没有转换为uint64(uint64(int)),它会抛出无效操作: number * RecursiveFactorial(number - 1) (int和uint64类型不匹配)
这里是递归函数的计算步骤序列

RecursiveFactorial(5)  
\--5\*RecursiveFactorial(4)  
  --5\*4\*RecursiveFactorial(3)  
    --5\*4\*3\*RecursiveFactorial(2)  
  --5\*4\*3\*2\*RecursiveFactorial(1)  
\--5\*4\*3\*2\*1 = 120  

下面是一个使用递归函数计算阶乘的程序

package main  
  
import (  
 "fmt"  
)  
  
func main() {  
 var number int  
 fmt.Print("Enter Number:")  
 fmt.Scanln(&number)  
 fmt.Printf("Factorial of %d = %d\n", number, RecursiveFactorial(number))  
  
}  
func RecursiveFactorial(number int) uint64 {  
 if number >= 1 {  
  return uint64(number) * RecursiveFactorial(number-1)  
 } else {  
  return 1  
 }  
}  

输出是

Enter Number:5  
Factorial of 5 = 120