Golang 如何找到一个数的阶乘
在这个教程中,我们将编写并解释在Golang中找到一个数的阶乘的代码。阶乘是该数与比它小的所有数的乘积。在这个教程中,我们将看到两种在Golang中找到阶乘的方法。一种是通过创建一个递归函数,另一种是使用循环。
例如,5的阶乘是:
5! = 5 * 4 * 3 * 2 * 1
= 120
通过递归寻找一个数的阶乘的方法
步骤
- 步骤1 - 在第一步中,我们声明想要找出阶乘的数字。数据类型为int64,以便我们可以存储大的阶乘值。
-
步骤2 - 现在我们将从用户那里获取输入并将其存储到我们上面声明的变量中。
-
步骤3 - 现在我们将调用阶乘函数,该函数将通过递归进行乘法运算来计算阶乘。
时间复杂度:O(N)
空间复杂度:O(1)
示例
在此示例中,我们将创建一个递归函数,最终将返回该函数的阶乘。
package main
// fmt package provides the function to print anything
import "fmt"
func factorial(number int64) int64 {
// if the number has reached 1 then we have to
// return 1 as 1 is the minimum value we have to multiply with
if number == 1 {
return 1
}
// multiplying with the current number and calling the function
// for 1 lesser number
factorialOfNumber := number * factorial(number-1)
// return the factorial of the current number
return factorialOfNumber
}
func main() {
// declaring the integer number using the var keyword
// whose factorial we have to find
var number int64
// initializing the variable whose factorial we want to find
number = 10
// calling the factorial() function and printing the factorial
fmt.Println("The factorial of", number, "is", factorial(number))
fmt.Println("(Finding the factorial in a recursive manner.)")
}
输出
The factorial of 10 is 3628800
(Finding the factorial in a recursive manner.)
逻辑解释
让我们看一下数字6的函数调用过程。
- 第一次调用是factorial(6),它返回6 * factorial(5)。
-
现在,在最后一个函数调用factorial(5)中调用的是5 * factorial(4)。
-
在最后一个函数调用factorial(4)中,调用的是4 * factorial(3)。
-
在最后一个函数调用factorial(3)中,调用的是3 * factorial(2)。
-
在最后一个函数调用factorial(2)中,调用的是2 * factorial(1)。
-
在最后一个函数调用factorial(1)中,由于满足了基本条件,它将返回1,现在我们将以后进先出的方式移动到最后一个函数调用。
-
现在factorial(2)返回2 * 1 = 2。
-
factorial(3)返回3 * 2 = 6。
-
factorial(4)返回4 * 6 = 24。
-
factorial(5)返回5 * 24 = 120。
-
factorial(6)返回6 * 120 = 720。
使用循环求一个数的阶乘的方法
步骤
-
步骤1 - 在步骤1中,我们声明要求阶乘的数字。数据类型为int64,以便我们可以存储大的阶乘值。
-
步骤2 - 现在我们将从用户那里获取输入,并存储在上面声明的变量中。
-
步骤3 - 现在我们将运行for循环来找到阶乘。
示例
在这个示例中,我们将使用for循环来找到用户输入的数字的阶乘。
package main
// fmt package provides the function to print anything
import "fmt"
func main() {
// declaring the integer number using the var keyword
// whose factorial we have to find
var number, iterator int64
// initializing the variable whose factorial we want to find
number = 9
// declaring the answer variable of int64 type and initializing with 1
var answer int64 = 1
// Running the for loop to find the factorial
for iterator = 1; iterator <= number; iterator++ {
answer = answer * iterator
}
// Printing the factorial of the respective number
fmt.Println("The factorial of", number, "is", answer)
fmt.Println("(Finding the factorial using for loop.)")
}
输出
The factorial of 9 is 362880
(Finding the factorial using for loop.)
逻辑解释
让我们看看如何使用for循环来找到等于6的数字的阶乘。
- 在第一次迭代中,我们将答案乘以1,因此答案=1 * 1 = 1。
-
在第二次迭代中,我们将答案乘以2,因此答案=1 * 2 = 2。
-
在第三次迭代中,我们将答案乘以3,因此答案=2 * 3 = 6。
-
在第四次迭代中,我们将答案乘以4,因此答案=6 * 4 = 24。
-
在第五次迭代中,我们将答案乘以5,因此答案=24 * 5 = 120。
-
在第六次迭代中,我们将答案乘以6,因此答案=120 * 6 = 720。
结论
这就是我们如何使用for循环找到6!的值,即720。这是找到一个数字的阶乘的两种不同方法。要了解更多关于go的信息,您可以探索这些教程。