2012-06-20 16 views
7

Chcę uruchomić coś takiego:nieograniczony pętle

For a = 0 To 4 
    For b = a To 4 
     For c = b To 4 
     Console.WriteLine(a & b & c) 
     Next 
    Next 
Next 

Ale muszę utworzyć n pętle jednego siebie. Tak więc stworzyłem tę metodę:

'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 

Jaki byłby najlepszy sposób na odzyskanie wartości "i" z wyższych poziomów? Czy powinienem przechowywać je w tablicy? Czy istnieje zupełnie inny sposób podejścia do tego problemu?

Odpowiedz

0

Po zabawie tą metodą w końcu znalazłem rozwiązanie. Oto ona:

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

Powinieneś przenieść 'If' poza pętlę, ponieważ' Depth' nie zmienia się z iteracji na iterację. Ta zmiana przeniesie Cię do standardowego układu funkcji rekursywnych, które opisałem w mojej odpowiedzi. – dasblinkenlight

0

Możesz dodać tablicę lub podobną strukturę jako parametr do Iterate(), a dla każdego połączenia do Iterate() dodajesz bieżącą wartość i do tablicy.

Dzięki temu można poznać głębokość pętli i bieżącą wartość pętli "macierzystej".