使用遞迴計算冪的Haskell程式


在 Haskell 中,我們可以使用遞迴以及各種情況來計算冪,也可以使用尾遞迴。在第一個示例中,我們將使用遞迴以及基本情況(power _ 0 = 1)和遞迴情況(power x y = x * power x (y-1))。在第二個示例中,我們將使用遞迴情況(power' x y | y == 0 = 1| otherwise = x * power' x (y-1)),在第三個示例中,我們將使用尾遞迴。

演算法

  • 步驟 1 − 定義使用者自定義的遞迴冪函式,例如:

  • 示例 1 −

power _ 0 = 1
power x y = x * power x (y-1).
  • 示例 2 −

power' x y
   | y == 0 = 1
   | otherwise = x * power' x (y-1).
  • 示例 3 

power x y = power' x y 1
   where
      power' x y acc
         | y == 0 = acc
         | otherwise = power' x (y-1) (acc*x).
  • 步驟 2 − 程式執行將從主函式開始。main() 函式控制整個程式。它寫成 main = do。在 main 函式中,程式將 x 設定為 2,y 設定為 5,然後使用這些值作為引數呼叫 power 函式。

  • 步驟 3 − 初始化名為“x”和“y”的變數。它們分別儲存底數和指數值。

  • 步驟 4 − 函式呼叫完成後,使用‘print’函式將結果冪列印到控制檯。

示例 1

在這個示例中,定義了一個名為 power 的函式,它接收兩個整數 x 和 y 作為引數。該函式使用遞迴來計算 x 的 y 次冪。當 y 為 0 時為基本情況,在這種情況下,函式返回 1。

power :: Integer -> Integer -> Integer
power _ 0 = 1
power x y = x * power x (y-1)

main :: IO ()
main = do
   let x = 2
   let y = 5
   print (power x y)

輸出

32

示例 2

這是 Haskell 中遞迴函式的一個簡單實現,它使用遞迴計算數字的冪。該函式接收兩個引數 x 和 y,並計算 x 的 y 次冪。當 y 等於 0 時為基本情況,在這種情況下,函式返回 1。在遞迴情況下,該函式將 x 與使用引數 x 和 y-1 呼叫函式的結果相乘,有效地將 x 提高到 y 的冪。

power' :: Integer -> Integer -> Integer
power' x y
   | y == 0 = 1
   | otherwise = x * power' x (y-1)

main :: IO ()
main = do
let x = 2
let y = 5
print (power' x y)

輸出

32

示例 3

在這個示例中,實現了用於計算數字冪的尾遞迴方法。該函式接收兩個引數 x 和 y,其中 x 是底數,y 是指數。它定義了一個內部函式 power',該函式接收三個引數 x、y 和 acc,其中 acc 用於儲存中間結果。該函式檢查 y 是否等於 0,如果是,則返回 acc,它是最終結果。如果 y 不等於 0,則使用 y 減 1 和 acc 乘以 x 自我呼叫。

power :: Integer -> Integer -> Integer
power x y = power' x y 1
   where
      power' x y acc
         | y == 0 = acc
         | otherwise = power' x (y-1) (acc*x)

main :: IO ()
main = do
let x = 2
let y = 5
print (power x y)

輸出

32

結論

在 Haskell 中,可以使用遞迴以及各種情況來計算冪。此外,還可以使用尾遞迴來計算。

更新於: 2023年3月27日

663 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告