使用遞迴查詢兩個數字乘積的 Haskell 程式


在 Haskell 中,我們可以使用遞迴以及遞迴重複加法來找到兩個數字的乘積。在第一個示例中,我們將使用 (product' x y | y == 0 = 0 | y == 1 = x | otherwise = x + product' x (y-1)) 函式。在第二個示例中,我們將使用遞迴重複加法。

演算法

  • 步驟 1 - 遞迴函式 product' 定義如下:

  • 對於示例 1 和 2 -

product' x y
   | y == 0 = 0
   | y == 1 = x
   | otherwise = x + product' x (y-1).
  • 對於示例 3 -

product' x y
   | y == 0 = 0
   | y == 1 = x
   | otherwise = x + product' x (y-1).
  • 步驟 2 - 程式執行將從 main 函式開始。main() 函式控制整個程式。它被寫成 main = do。在 main 函式中,我們定義了 x 和 y,並使用 print 函式輸出 product' x y 的結果。

  • 步驟 3 - 變數 “x” 和 “y” 被初始化。它將儲存要計算乘積的數字。

  • 步驟 4 - 呼叫 product' 函式後,使用 'print' 函式將兩個數字的乘積結果列印到控制檯。

示例 1

在這個示例中,我們定義了一個名為 product' 的函式,它接收兩個整數 x 和 y 作為輸入。該函式使用遞迴來查詢這兩個數字的乘積。基本情況是當 y 等於 0 時,函式返回 0。下一個基本情況是當 y 等於 1 時,函式返回 x。如果這兩個基本情況都不滿足,則函式遞迴呼叫自身,輸入為 x 和 y-1,並將結果加到 x 上。

product' :: Integer -> Integer -> Integer
product' x y
   | y == 0 = 0
   | y == 1 = x
   | otherwise = x + product' x (y-1)

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

輸出

10

示例 2

在這個示例中,我們將看到如何找到兩個數字的乘積。這可以透過使用尾遞迴來完成。這裡,該函式使用一個名為 productTailHelper 的輔助函式,它接收三個引數:x、y 和累加器 acc。遞迴的基本情況是當 y 等於 0 時,函式返回 acc。在遞迴情況下,該函式自身呼叫,更新的引數為 x、y-1 和 acc+x,這會用乘積計算中的下一個值更新累加器。當遞迴到達基本情況時,返回最終結果。

productTail :: Integer -> Integer -> Integer
productTail x y = productTailHelper x y 0
   where
      productTailHelper x y acc
         | y == 0 = acc
         | otherwise = productTailHelper x (y-1) (acc+x)

main :: IO ()
main = do
let x = 3
let y = 4
print (productTail x y)

輸出

12

示例 3

此示例利用了乘法只是重複加法的事實。它首先檢查第二個數字 (y) 是否為 0,如果是,則乘積為 0。如果 y 為 1,則乘積僅為 x。否則,函式自身呼叫,輸入為 x 和 y-1,並將 x 加到結果中,有效地將 x 自身加 y 次。

product' :: Integer -> Integer -> Integer
product' x y
   | y == 0 = 0
   | y == 1 = x
   | otherwise = x + product' x (y-1)

main :: IO ()
main = do
let x = 3
let y = 4
print (product' x y)

輸出

12

結論

在 Haskell 中,可以透過使用遞迴以及輔助函式作為尾遞迴或使用重複加法來計算兩個數字的乘積。

更新於: 2023年3月27日

468 次檢視

啟動你的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.