【发布时间】:2012-10-18 21:12:57
【问题描述】:
这是我的功能:
//Data Structures :
abstract class HuffmanTree
case class Node(left: HuffmanTree, right: HuffmanTree, chars: List[Char], weight: Int) extends HuffmanTree
case class Leaf(char: Char, weight: Int) extends HuffmanTree
def find_char(tree: HuffmanTree, x: Char, accu: List[Int]): (Boolean, List[Int]) = {
tree match {
case Leaf(c, _) => ((x == c),accu)
case Node(left, right, ll, _) =>
(find_char(left, x, accu ::: List(0))._1 || find_char(right, x, accu :::List(1))._1, accu);
}
}
该函数采用霍夫曼树、字符和累加器。该函数的目的是在霍夫曼树中搜索字符并对其进行编码。所以我遍历树,当我向左时,我向累加器加 0,当我向右时,我向累加器加 1。
我想知道这个函数是否是尾递归的?
我还有一个问题。当我到达Leaf 时,返回的累加器总是空的。谁能解释一下我为什么会遇到这个问题?
【问题讨论】:
-
我回答了第一部分。您的代码目前包含语法错误。因此,很难说出其中有什么问题。
-
改正语法错误即可。对于第二部分,返回累加器为空。
-
最后一行的括号仍然不匹配。如果我理解得很好,那么您的问题就来自于此。你能复制/粘贴你的实际代码吗?
-
我更新了代码。我添加了我正在使用的数据结构
标签: scala tail-recursion