使用遞迴查詢給定數字的反轉的Haskell程式


在Haskell中,我們可以使用遞迴和輔助函式來查詢給定數字的反轉。在第一個例子中,我們將使用(reverseNumHelper n rev)函式,在第二個例子中,我們將使用(reverseNum n | n < 10 = n| otherwise = (n `mod` 10) * (10 ^ numDigits (n `div` 10)) + reverseNum (n `div` 10))函式。

使用遞迴和輔助函式查詢給定數字的反轉

在這種方法中,reverseNumHelper函式接受兩個引數:n和rev。n是要反轉的數字,rev是到目前為止反轉的數字。該函式使用累加器rev來跟蹤到目前為止反轉的數字。該函式重複取n的最後一位數字(n mod 10),將其新增到rev乘以10 (rev * 10 + (n mod 10)),然後將n除以10 (n div 10)以獲得剩餘的數字。

演算法

  • 步驟1 − 使用輔助函式定義使用者自定義的遞迴反轉數字函式,其定義如下:

reverseNumHelper n rev
| n == 0 = rev
| otherwise = reverseNumHelper (n `div` 10) (rev * 10 + (n `mod` 10)) .
  • 步驟2 − 程式執行將從主函式開始。main()函式控制整個程式。它被寫成main = do。在主函式中,透過向其傳遞引數來呼叫使用者自定義的遞迴函式。

  • 步驟3 − 變數“num”被初始化。它將儲存要列印其反轉的數字。

  • 步驟4 − 函式呼叫後,使用‘show’函式將反轉後的數字列印到控制檯。

示例1

在這個例子中,使用輔助函式reverseNumHelper來反轉數字。reverseNum函式充當包裝器,它用n作為第一個引數,0作為第二個引數呼叫reverseNumHelper。

reverseNum :: Integer -> Integer
reverseNum n = reverseNumHelper n 0

reverseNumHelper :: Integer -> Integer -> Integer
reverseNumHelper n rev
   | n == 0 = rev
   | otherwise = reverseNumHelper (n `div` 10) (rev * 10 + (n `mod` 10))

main :: IO ()
main = do
   let num = 12345
   let reversedNum = reverseNum num
   putStrLn (show reversedNum)

輸出

54321

使用遞迴查詢給定數字的反轉

在這種方法中,reverseNum函式使用遞迴來反轉數字,首先將n的最後一位數字(n mod 10)乘以10的冪,該冪等於n剩餘數字的位數(10 ^ numDigits (n div 10))。然後遞迴計算剩餘數字的反轉(reverseNum (n div 10))並將其新增到結果中。

演算法

  • 步驟1 − 使用者自定義的遞迴反轉函式定義如下:

reverseNum n
| n < 10 = n
| otherwise = (n `mod` 10) * (10 ^ numDigits (n `div` 10)) + reverseNum (n `div` 10).
  • 步驟2 − 使用者自定義的numDigits函式定義如下:

numDigits n
| n < 10 = 1
| otherwise = 1 + numDigits (n `div` 10).
  • 步驟3 − 程式執行將從主函式開始。main()函式控制整個程式。它被寫成main = do。在主函式中,使用者自定義的遞迴函式被反覆遞迴呼叫,並向其傳遞引數。

  • 步驟4 − 變數“num”被初始化。它將儲存要列印其反轉的數字。

  • 步驟5 − 函式呼叫後,使用‘show’函式將反轉後的數字列印到控制檯。

示例1

在這個例子中,使用了兩個函式reverseNum和numDigits。reverseNum函式接受一個整數引數n並返回其反轉。numDigits函式接受一個整數引數n並返回n的位數。

reverseNum :: Integer -> Integer
reverseNum n
   | n < 10 = n
   | otherwise = (n `mod` 10) * (10 ^ numDigits (n `div` 10)) + reverseNum (n `div` 10)

numDigits :: Integer -> Integer
numDigits n
   | n < 10 = 1
   | otherwise = 1 + numDigits (n `div` 10)

main :: IO ()
main = do
   let num = 12345
   let reversedNum = reverseNum num
   putStrLn (show reversedNum)

輸出

54321

結論

數字的反轉是由反向讀取原始數字的數字形成的新數字。例如,數字12345的反轉是54321。

在Haskell中,可以使用遞迴反轉數字。遞迴允許找到簡潔優雅的解決方案。這是一種用基本情況和遞迴情況定義函式的方法。這些函式可以接受任何數字作為引數,並將相同數字的反轉返回到控制檯。

更新於:2023年3月27日

瀏覽量:315

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.