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。

更新於:2022年8月5日

4K+瀏覽量

開啟您的職業生涯

透過完成課程獲得認證

開始學習
廣告