Swift程序:求解数字阶乘
本教程将讨论如何编写一个Swift程序来计算数字的阶乘。
非负数的阶乘是通过将该数字与每个整数(直到1)相乘来计算的,例如,6! = 6 x 5 x 4 x 3 x 2 x 1 = 720,这意味着6的阶乘是720。
阶乘的一般形式为:
M! = m x (m - 1) x (m - 2) x (m - 3) …. X 1
公式
以下是阶乘的公式:
M! = M * (M - 1)!
以下是相同的演示
假设我们的输入是:
Enter the number - 10
以下是期望的输出,因为10! = 10 x 9 x 8 x 7 x 6 x 5 x 4 x 3 x 2 x 1
Final result - 3628800
我们可以使用以下任何一种方法来计算数字的阶乘:
使用递归计算阶乘
我们可以使用递归来计算阶乘。递归是一个函数调用自身来解决问题的过程。
算法
步骤1 - 创建一个函数
步骤2 - 使用if语句检查给定数字是否为0,如果是则返回1。否则,通过自身调用返回阶乘。
步骤3 - 声明一个变量,其值可以是预定义的或用户定义的。
步骤4 - 调用函数并将定义的变量作为参数传递给它。
步骤5 - 打印输出。
示例
以下程序展示了如何使用递归计算数字的阶乘:
import Foundation import Glibc func factorialValue(fNumber: Int) -> Int{ if fNumber == 0{ return 1 } else { return fNumber * factorialValue(fNumber:fNumber-1) } } var value = 4 var output = factorialValue(fNumber: value) print("Number is \(value)") print("So the factorial is \(output)")
输出
Number is 4 So the factorial is 24
在上面的代码中,我们创建了一个名为factorialValue()的递归函数。该函数最初以value = 4作为参数调用。在这个函数中,我们首先检查给定的数字是否为0,这是停止递归函数的基本条件。如果给定的数字不是0,则将通过将该数字与函数本身相乘来找到该数字的阶乘,直到fNumber变为0。
return fNumber * factorialValue(fNumber:fNumber-1)
这里,函数通过将fNumber减1来调用自身,这个过程将持续到fNumber的值变为0。因此,factorialValue()函数的工作方式是:
1st function call with 4: factorialValue(4) = 4 * factorialValue(3) 2nd function call with 3: factorialValue(3) = 3 * factorialValue(2) 3rd function call with 2: factorialValue(2) = 2 * factorialValue(1) 4th function call with 1: factorialValue(1) = 1 * factorialValue(0) 5th function call with 0: factorialValue(0) = 1(According to our condition the function return 1 when fNumber is 0) Returned from 5th function call: 1 Returned from 4th function call: 1 * 1 = 1 Returned from 3rd function call: 2 * 1 = 2 Returned from 2nd function call: 3 * 2 = 6 Returned from 1st function call: 4 * 6 = 24 Display the factorial of 4 which is 24.
使用for循环计算阶乘
我们可以使用for循环来计算数字的阶乘。迭代方法比递归方法便宜得多。
算法
算法解释如下:
步骤1 - 创建一个函数
步骤2 - 声明一个值为output = 1的变量。
步骤3 - 使用if语句检查给定数字是否大于1。
步骤4 - 使用for循环迭代从1到给定数字的范围并找到阶乘。
步骤5 - 声明一个变量,其值可以是预定义的或用户定义的。
步骤6 - 调用函数并将定义的变量作为参数传递给它。
步骤7 - 打印输出。
示例
以下程序展示了如何使用for循环计算数字的阶乘:
import Foundation import Glibc func factorialValue(fNumber: Int) -> Int{ var output = 1 if (fNumber > 1) { for j in 1...fNumber{ output *= j } } return output } var value = 3 var output = factorialValue(fNumber: value) print("Number is \(value)") print("So the factorial is \(output)")
输出
Number is 3 So the factorial is 6
在上面的代码中,我们创建了一个名为factorialValue()的函数。在这个函数中,我们创建了一个名为output的变量,其值为1,这个变量存储最终的输出。现在我们使用if语句检查给定的数字是否大于1,当条件为真时,控制将进入for循环,范围从1到fNumber,通过将数字与其较小的数字相乘来找到给定数字的阶乘,并返回最终的输出。现在我们创建一个名为“value”的变量,其值为3。现在我们调用factorialValue()函数并将“value”变量作为参数传递给函数,并将结果赋值给“output”变量,并显示3的阶乘,即6。
使用while循环计算阶乘
我们可以使用while循环来计算数字的阶乘,因为与递归方法相比,迭代方法更便宜。
算法
算法解释如下:
步骤1 - 创建一个函数
步骤2 - 声明两个变量,其值为output *= 1和k = 1。
步骤3 - 使用条件k <= fNumber运行while语句并找到阶乘。
步骤4 - 声明一个变量,其值可以是预定义的或用户定义的。
步骤5 - 调用函数并将定义的变量作为参数传递给它。
步骤6 - 打印输出。
示例
以下程序展示了如何使用while循环计算数字的阶乘:
import Foundation import Glibc func factorialValue(fNumber: Int) -> Int{ var output = 1 var k = 1 while(k <= fNumber){ output *= k k += 1 } return output } var value = 8 var output = factorialValue(fNumber: value) print("Number is \(value)") print("So the factorial is \(output)")
输出
Number is 8 So the factorial is 40320
在上面的代码中,我们创建了一个名为factorialValue的函数。在这个函数中,我们创建了两个名为output *= 1和k = 1的变量。现在使用条件k <= fNumber运行while循环。这个循环一直运行到给定的条件为真,并找到该数字的阶乘。现在我们创建一个名为“value”的变量,其值为8。现在我们调用factorialValue()函数并将“value”变量作为参数传递给函数,并将结果赋值给“output”变量,并显示8的阶乘,即40320。