Scala:递归搜索避免循环

时间:2012-12-08 10:40:17

标签: scala search recursion

如何编写一个我避免循环的递归搜索。

我的课是这样的:

class Component(var name: String, var number: Int, var subComponent: Set[Component])

现在我需要一种方法来检查组件是否包含在其子组件中或子组件的子组件之间等等。避免由其他组件引起的可能的循环。

我的递归搜索方法必须具有以下签名, 其中subC是comp的Set [component]。

def content (comp: Component, subC: Set[Component]) : Boolean = {
}

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

一种方法是使用visited累加器定义内部函数。

def content (comp: Component, subC: Set[Component]) : Boolean = {
    def contained(comp: Component, subC: Set[Component], visited: Set[Component]): Boolean = {
        // over time (recursion) add components to visited
        // you can then use 
        //    visited contains comp
        // to check existence and 
        //    visited diff subC
        // to get the unvisited components

    }
}

答案 1 :(得分:0)

实现此目的的最简单方法是保留一组访问过的组件。这可以定义为方法内的方法。该方法将执行递归。它将访问集作为额外参数,并将以空集启动。