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

时间:2011-05-17 12:44:59

标签: haskell recursion numbers

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

  

使用添加功能   自然数,给出递归   乘法的定义   自然数。

4 个答案:

答案 0 :(得分:5)

您可以将3 * 5视为5 + 5 + 5,即为5次添加3。如果你想以递归的方式做到这一点,那么你可以这样想:a * b的结果等于将b添加到(a-1) * b的结果中。从这里到Haskell递归函数,步骤很小:)

答案 1 :(得分:1)

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

类似这样的事情

答案 2 :(得分:1)

一个定义是:

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)以解决一般问题并逐个替换该函数是一个很好的家庭作业策略。这有助于以可管理的步骤划分问题,并为您提供Haskell API的免费介绍。

答案 3 :(得分:0)

i,j的乘法只是加i,j次。这是java代码,但你可以从中获取逻辑。

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