使用自然数上的加法函数,给出自然数乘法的递归定义



我有以下练习,但不确定我应该如何开始。措辞对我来说没有意义:

在 自然数,给出递归 乘法的定义 自然数。

你可以

3 * 5想象成5 + 5 + 5,即添加5 3次。如果你想递归地做,那么你可以这样想:a * b的结果等于在(a-1) * b的结果中加b。从这里到Haskell递归函数,步骤很小:)

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

像这样的东西

一个定义是:

mul m n = sum $ replicate m n

在这里replicate a b创建一个包含 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)来解决一般问题,并逐个替换该函数是一个很好的家庭作业策略。这有助于将问题划分为可管理的步骤,并为您提供HaskellAPI的免费介绍。

i, j

的乘法只不过是加上 i, j 次。 这是 Java 代码,但您可以从中获取逻辑。

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

最新更新