通过添加计算产品

时间:2014-02-05 03:48:54

标签: algorithm haskell

这是我一直在努力解决的算法问题。我想我可以在这里获得一些见解。我需要在Haskell中创建以下函数:

  

声明类型并定义一个函数,该函数将两个数字作为输入并通过加法找到它们的乘积。也就是说,将第一个数字添加为第二个数字,与第二个数字相同。

我的问题是,这基本上只是将两个数字相乘,但它表示我需要添加它。有没有人知道如何做到这一点?

这就是我能想到的(这不对):(x + x) * y

谢谢

4 个答案:

答案 0 :(得分:2)

mult (x, y):
  sum = 0
  for 1 to y:
    sum = sum + x
  return sum

这只是算法。我不知道Haskell。所以另一个答案中的lambda表达式可能更合适。另外,我使用了一个中间变量。

PS:忘记以前令人尴尬的递归算法

答案 1 :(得分:2)

如果a是第一个数字,b是第二个

sum $ take a $ cycle [b]

应该做ot

答案 2 :(得分:2)

通过归纳法解决。

我们知道一个简单(最简单)问题的答案:将任意乘以0得到0.所以我们写道:

mul x 0 = 0

现在,归纳步骤:如果我们知道解决较小问题的解决方案,我们可以为更大的问题建立解决方案;这样我们总能将任何大问题减少到最小的问题,我们知道解决方案。因此,对于任何y,可以通过将y添加到y的解:mul x (y+1) = x + (mul x y)来找到y + 1的解。在Haskell中,我们不能在左侧写(y + 1),所以我们写的等价:

mul x y = x + (mul x (y-1))

此功能将继续添加x,直到y为零。

答案 3 :(得分:1)

试试这个

multiply::(Num a,Eq a) => a -> a -> a
multiply a 0 = 0
multiply a b = a + multiply a (b - 1)

main = print $ multiply 5 7