这篇博文涉及两个计算数字阶乘的程序
- 使用递归函数
- 使用迭代函数
数字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