繁体   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