タイトル : Re: サンプル 投稿日 : 2023/02/17(Fri) 08:59 投稿者 : たけし
御世話になります。 新規作成したプロジェクトにサンプルを記述しまして 結果得ることができました。 こちらに、自分が作成したプログラムを組み込んで サンプルの結果も得ることができました。 自分が作成したプログラムに サンプルを組み込むとエラーになる要因想定できますでしょうか? また、デバック方法がわからないのと 以下プログラムの流れ(順番)について理解できませんでしたので教えてください。 私の知るプログラムはコールしたファンクションで答えを求めて 戻った値について、加算していくなどです。 Search(i + 1, nextNode) から Search(0, root)に移って 再びSearch(i + 1, nextNode) に戻る(?)のでしょうか? または earch(i + 1, nextNode) から Search(0, root)に移って If edge Is Nothing Then '見つからなかった Return New Integer(-1) {} Else Dim result As New Stack(Of Integer)() Dim e = edge Do result.Push(e.Value) e = e.Parent Loop Until e Is root Return result.ToArray() End If 実行後に 再びSearch(i + 1, nextNode) に戻る(?)のでしょうか? 宜しくお願い致します。 '探索処理 Dim maxIndex = ordered.GetUpperBound(0) Dim edge As Node = Nothing '発見した組み合わせ Dim Search As Action(Of Integer, Node) = Sub(index, parent) If Not edge Is Nothing Then Return '既に発見済み For i = index To maxIndex Dim nextValue = ordered(i) '値を昇順に抽出 Dim nextNode As New Node(parent, nextValue) If nextNode.Total <= targetValue Then parent.Add(nextNode) '超過しないなら抽出 If nextNode.Total = targetValue Then edge = nextNode '目標値に達したので探索終了 Return Else Search(i + 1, nextNode) '再帰して次の組み合わせを選ぶ End If End If Next End Sub '探索実行 Dim root As New Node(Nothing, 0) Search(0, root) If edge Is Nothing Then '見つからなかった Return New Integer(-1) {} Else Dim result As New Stack(Of Integer)() Dim e = edge Do result.Push(e.Value) e = e.Parent Loop Until e Is root Return result.ToArray() End If |