2012-06-20 8 views
7

ループ。だから私はこのメソッドを作成しました:無制限の場合は、私がこのような何かを実行したい

'iFrom = 0; iTo = 4; Depth = 3(loop count); 
Private Sub Iterate(ByVal iFrom As Integer, ByVal iTo As Integer, ByVal Depth As Integer) 
    For i = iFrom To iTo 
     If Depth - 1 > 0 Then Iterate(iFrom, iTo, Depth - 1) 

     'Do stuff here 
    Next 
End Sub 

"i"の値を上位レベルから取得するにはどうすればよいでしょうか?それらを配列に格納する必要がありますか?あるいは、この問題にアプローチするための全く別の方法がありますか?

答えて

0

この方法で遊んだ後、私は最終的に解決策を見つけました。ここでは:

Private Sub Iterate(ByVal iFrom As Integer, ByVal iTo As Integer, ByVal Depth As Integer, ByVal iValues As Integer()) 
    For i = iFrom To iTo 
     iValues(Depth - 1) = i 
     If Depth - 1 > 0 Then 
      Iterate(i, iTo, Depth - 1, iValues) 
     Else     
      'Do stuff, in this case print the current iValues 
      Console.WriteLine(String.Join("", iValues.Select(Function(x) x.ToString).ToArray))     
     End If 
    Next 
    Console.WriteLine() 
End Sub 

'Usage: 
Dim iValueArray(Depth) As Integer 
Iterate(0, 1, 2, iValueArray) 
+0

'Depth'は反復から反復に変わらないので、ループの外側に' If'を移動する必要があります。この変更は、私の答えで説明した再帰関数の標準レイアウトになります。 – dasblinkenlight

0

Iterate()にパラメータとして配列または同様の構造体を追加し、Iterate()を呼び出すたびに現在の値iを配列に追加できます。

したがって、ループの深さと "親"ループの現在の値を知ることができます。

関連する問題