【问题标题】:Using the addition function over the natural numbers, give a recursive definition of multiplication of natural numbers?在自然数上使用加法函数,给出自然数乘法的递归定义?
【发布时间】:2011-05-17 23:15:34
【问题描述】:

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

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

【问题讨论】:

    标签: haskell recursion numbers


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:
      mul(n,1) = n
      mul(n,m) = mul(n,m-1) + n
      

      类似的东西

      【讨论】:

        【解决方案3】:

        一个定义是:

        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 的免费介绍。

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

          • 你一定是那些认为自然是从 1 开始的人之一 :-)
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-06-01
          • 2020-12-12
          • 1970-01-01
          • 1970-01-01
          • 2015-11-22
          • 1970-01-01
          • 2018-08-06
          相关资源
          最近更新 更多