2012-06-20 270 views
7

我想運行是這樣的:無限FOR循環

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

但我需要創建N個迴路一個對方。所以我創建了這個方法:

'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

你應該在循環之外移動'If',因爲'Depth'不會從迭代變爲迭代。這個改變會帶你到我在我的答案中描述的遞歸函數的標準佈局。 – dasblinkenlight

0

您可以添加一個數組或類似的結構作爲Iterate()的參數,並且對於每次調用Iterate(),您將當前值i添加到數組中。

因此你可以知道你的循環的深度和「父」循環的當前值。