2012-06-20 15 views
7

voglio correre qualcosa di simile:illimitato per i cicli

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

Ma ho bisogno di creare n loop un l'altro. Così ho creato questo metodo:

'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 

Quale sarebbe il modo migliore per recuperare la "i" valori da livelli superiori? Devo memorizzarli in un array? O c'è un modo completamente diverso per affrontare questo problema?

risposta

0

Dopo aver giocato con questo metodo ho finalmente trovato la soluzione. Eccolo:

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

Si dovrebbe spostare 'If' al di fuori del ciclo, perché 'Depth' non cambia da iterazione a iterazione. Questo cambiamento ti porterà al layout standard delle funzioni ricorsive che ho descritto nella mia risposta. – dasblinkenlight

0

È possibile aggiungere un array o una struttura simile come parametro a Iterate() e per ogni chiamata a Iterate() si aggiunge il valore corrente di i all'array.

In questo modo è possibile conoscere la profondità del loop e il valore corrente del ciclo "padre".

Problemi correlati