2012-06-20 13 views
7

मैं कुछ इस तरह चलाना चाहते हैं:असीमित के लिए लूप

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

आपको लूप के बाहर 'अगर' को स्थानांतरित करना चाहिए, क्योंकि 'गहराई' पुनरावृत्ति से पुनरावृत्ति में नहीं बदलती है। यह परिवर्तन आपको मेरे उत्तर में वर्णित पुनरावर्ती कार्यों के मानक लेआउट पर ले जाएगा। – dasblinkenlight

0

आप Iterate() पर पैरामीटर के रूप में एक सरणी या समान संरचना जोड़ सकते हैं और प्रत्येक कॉल के लिए Iterate() पर आप सरणी में i का वर्तमान मान जोड़ सकते हैं।

इस प्रकार आप अपने लूप की गहराई और "पैरेंट" लूप के वर्तमान मूल्य को जान सकते हैं।