如何使这个代码尾递归?

时间:2015-10-06 14:08:05

标签: tail-recursion oz

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

此代码已经是尾递归的。你有递归作为最后一个语句,所以你先计算结果,然后调用递归。