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。