2011-05-17 107 views

回答

5

你能想到的3 * 55 + 5 + 5,即对于3次加5。如果要递归执行此操作,则可以这样想:a * b的结果等于将b添加到(a-1) * b的结果中。从这里到一个Haskell递归函数,步骤是小:)

0

i,j的乘法不过是增加了i,j次。这是java代码,但你可以从中得到逻辑。

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

你一定是那些认为自然界从1开始的人之一:-) – sigfpe 2011-05-17 17:28:02

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

像这样

1

一个定义是:

mul m n = sum $ replicate m n 

这里replicate a b创建一个包含B,例如一个副本列表重复3 5 = [5,5,5]。 sum给出列表的总和,例如sum [5,5,5]是15. Bingo!

当然使用内置函数会是作弊,那么你怎么能自己写这些函数?我给你一些提示:

replicate' 0 x = [] 
replicate' n x = x : ??? 

sum' [] = 0 
sum' (x:xs) = ??? 

一般来说是为了解决一般问题寻找预定义的功能(例如,使用Hoogle),并替代了良好的作业策略,功能也一一。这有助于在可管理的步骤中分解问题,并让您可以自由介绍Haskell API。