【问题标题】:How can I make this code tail recursive?如何使此代码尾递归?
【发布时间】:2015-10-06 14:08:04
【问题描述】:

以下代码旨在附加两个列表。

fun {AppendLists L1 L2}
    if L1 == nil then L2
    else
        L1.1 | {AppendLists L1.2 L2}
    end
end

【问题讨论】:

    标签: tail-recursion oz


    【解决方案1】:

    如果您不明白为什么您的代码已经是尾递归的,这里是相同的代码,但语法糖少了一点。您的函数已转换为带有额外参数的过程以存储结果(这由兼性“?”表示)。

    proc {AppendLists L1 L2 ?R} 
      if L1 == nil then L2
      else K in 
         R = L1.1 | K
         {AppendLists L1 L2 K}
      end
    end 
    

    【讨论】:

      【解决方案2】:

      这段代码已经是尾递归的。您将递归作为最后一条语句,因此您首先计算结果,然后调用递归。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-01-13
        • 1970-01-01
        • 1970-01-01
        • 2020-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多