簡體   English   中英

在自然數上使用加法函數,給出自然數乘法的遞歸定義嗎?

[英]Using the addition function over the natural numbers, give a recursive definition of multiplication of natural numbers?

我進行以下練習,但是不確定如何開始。 這種措辭對我來說沒有意義:

在自然數上使用加法函數,給出自然數乘法的遞歸定義。

您可以將3 * 5視為5 + 5 + 5 ,即將35 如果要遞歸執行,則可以這樣考慮: a * b的結果等於將b添加到(a-1) * b的結果中。 從這里到Haskell遞歸函數,步驟很小:)

mul(n,1) = n
mul(n,m) = mul(n,m-1) + n

這樣的事情

一種定義是:

mul m n = sum $ replicate m n

在這里, replicate ab創建一個包含b的副本的列表,例如,復制3 5 = [5,5,5]。 sum給出列表的總和,例如sum [5,5,5]為15。

當然,使用內置函數會帶來欺騙,那么您如何自己編寫這些函數呢? 我會給你一些提示:

replicate' 0 x = [] 
replicate' n x = x : ??? 

sum' [] = 0
sum' (x:xs) = ???

通常,尋找預定義的功能(例如使用Hoogle)以解決一般問題,並逐個替換該功能是一種不錯的作業策略。 這有助於將問題划分為可管理的步驟,並為您免費介紹Haskell API。

i,j的乘積只不過是將i,j乘以。 這是Java代碼,但是您可以從中獲取邏輯。

    public int mul(int i, int j) {
        if(j==1) return i;
        return i + mul(i, j-1);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM