这是我一直在努力解决的算法问题。我想我可以在这里获得一些见解。我需要在Haskell中创建以下函数:
声明类型并定义一个函数,该函数将两个数字作为输入并通过加法找到它们的乘积。也就是说,将第一个数字添加为第二个数字,与第二个数字相同。
我的问题是,这基本上只是将两个数字相乘,但它表示我需要添加它。有没有人知道如何做到这一点?
这就是我能想到的(这不对):(x + x) * y
谢谢
答案 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