1

サイクルを回避する再帰検索を作成するにはどうすればよいですか。

私のクラスはこれです:

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

ここで、コンポーネントがサブコンポーネント内に含まれているか、サブコンポーネントのサブコンポーネント間に含まれているかなどを確認する方法が必要です。他のコンポーネントによって引き起こされる可能性のあるサイクルを回避します。

私の再帰的検索方法には、次のシグネチャが必要です。ここで、subC は comp の Set [コンポーネント] です。

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

助けてくれてありがとう。

4

2 に答える 2

0

visited1 つの方法は、アキュムレータを使用して内部関数を定義することです。

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

    }
}
于 2012-12-08T10:58:25.620 に答える
0

これを実装する最も簡単な方法は、訪問したコンポーネントのセットを保持することです。これは、メソッド内のメソッドとして定義できます。メソッドは再帰を行います。訪問したセットを追加の引数として取り、空のセットで開始されます。

于 2012-12-08T11:02:00.423 に答える