2010-04-26 15 views
6

का उपयोग करके सितारों में से एक त्रिकोण बनाएं, मुझे printTriangle(5); नामक एक विधि लिखनी होगी। हमें एक पुनरावृत्ति विधि और एक पुनरावर्ती विधि बनाने की आवश्यकता है (बिना किसी पुनरावृत्ति के)। उत्पादन इस तरह देखने के लिए की जरूरत है:केवल रिकर्सन

* 
** 
*** 
**** 
***** 

इस कोड पुनरावृत्ति के साथ काम करता है, लेकिन मैं यह अनुकूलन नहीं कर सकते पुनरावर्ती होने के लिए।

public void printTriangle (int count) { 
    int line = 1; 
    while(line <= count) { 
     for(int x = 1; x <= line; x++) { 
      System.out.print("*"); 
     } 
     System.out.print("\n"); 
     line++; 
    } 
} 

मैं नोट करना चाहिए कि आप किसी भी वर्ग के स्तर चर या किसी भी बाहरी विधियों का उपयोग नहीं कर सकते हैं।

+8

यह एक होमवर्क असाइनमेंट है: तो, अपने कोड की तरह कुछ हो सकता है? –

+1

रिक्त स्थान जावा विधि नामों में मान्य वर्ण नहीं हैं। आपको इसे 'like_printTriangle (5) ' – mob

+0

@DJ पर कॉल करना होगा। हाँ यही है। यह 22 अध्यायों में पहली बार है जब मुझे कोई समस्या है। @mobrule: क्या है कि कुछ भी से कोई लेना देना है? एक बात मैं करने की कोशिश की प्रारूपण स्ट्रिंग उपयोग कर रहा था, लेकिन ऐसा लगता जावा की तरह कस्टम गद्दी वर्ण का समर्थन नहीं करता। –

उत्तर

12

सूचना आप दो काउंटर है: पहले क्या लाइन आप line पर हैं, और दूसरी पंक्ति आप x पर हैं पर क्या स्थिति है। आप एक पुनरावर्ती समारोह है कि दो पैरामीटर लेता है और उन्हें नेस्टेड काउंटर, y और x के रूप में उपयोग करता है बना सकते हैं। आप कहाँ एक्स घटती है जब तक यह 0 तक पहुँच जाता है, तो y और सेट एक्स = y घटती है, जब तक दोनों x और y 0.

हैं आप यह भी हो सकता है कि त्रिकोण में प्रत्येक अगली लाइन पिछली लाइन के अलावा एक सितारा है। यदि आपका रिकर्सिव फ़ंक्शन पिछली पंक्ति के लिए सितारों की एक स्ट्रिंग देता है, तो अगली पंक्ति हमेशा स्ट्रिंग प्लस एक और स्टार होती है।

public String printTriangle (int count) { 
    if(count <= 0) return ""; 

    String p = printTriangle(count - 1); 
    p = p + "*"; 
    System.out.println(p); 

    return p; 
} 
+1

वाह। मुझे विश्वास नहीं है कि मैंने इसके बारे में नहीं सोचा था। मुझे लगता है कि मुझे फेंक दिया गया क्योंकि मैंने माना कि शून्य को वापस करना पड़ा क्योंकि इसे कुछ भी वापस करने का कोई मतलब नहीं था। अच्छा काम और धन्यवाद! इसके अलावा, महान स्पष्टीकरण। –

+0

+1 यहां सही सोलू है tion। बहुत चालाक! :-) एक अप्रासंगिक सुधार: दो प्रिंट स्टेटमेंट को एक 'System.out.println (पी) द्वारा प्रतिस्थापित किया जा सकता है; ' –

+0

अच्छा। और एक अच्छे प्रश्न के लिए प्रोफेसर को +1 करें :) –

2

आप इस तरह एक पुनरावर्ती कार्य करने के लिए एक पाश में बदल सकते हैं:

void printStars(int count) { 
    if (count == 0) return; 

    System.out.print("*"); 
    printStars(count - 1); 
} 
printStars(5); //Prints 5 stars 

आप एक समान कार्य लाइनों मुद्रित करने के लिए बनाने के लिए सक्षम होना चाहिए।

+1

कि 1 लाइन बाहर प्रिंट करता है। असाइनमेंट 1 विधि में पूरे त्रिकोण के लिए है। यही कारण है कि यह मुझे भ्रमित कर रहा है। –

+6

क्या आप अभी भी कोर्स छोड़ सकते हैं? – WhirlWind

+1

तो आप जहां लाइन ब्रेक मुद्रित करने के लिए –

3

अजगर में उदाहरण (सिर्फ प्रोटोटाइप के लिए है, लेकिन मुझे उम्मीद है कि विचार के माध्यम से हो जाता है):

$ python 2717111.py 
* 
** 
*** 
**** 
***** 
+2

मुझे संदेह है कि इसे पुनरावृत्ति माना जाएगा। – SLaks

+0

मान्य होने पर, यह जावा के लिए बहुत मदद नहीं करता है :) –

2

तुम भी एक साथ यह कर सकते हैं:

#!/usr/bin/env python 

def printTriangle(n): 
    if n > 1: 
     printTriangle(n - 1) 
    # now that we reached 1, we can start printing out the stars 
    # as we climb out the stack ... 
    print '*' * n 

if __name__ == '__main__': 
    printTriangle(5) 

आउटपुट इस तरह दिखता है एकल (इतना सुरुचिपूर्ण) रिकर्सन निम्नानुसार है:

public static void printTriangle (int leftInLine, int currLineSize, int leftLinesCount) { 
    if (leftLinesCount == 0) 
     return; 
    if (leftInLine == 0){ //Completed current line? 
     System.out.println(); 
     printTriangle(currLineSize+1, currLineSize+1, leftLinesCount-1); 
    }else{ 
     System.out.print("*"); 
     printTriangle(leftInLine-1,currLineSize,leftLinesCount); 
    } 
} 

public static void printTriangle(int size){ 
    printTriangle(1, 1, size); 
} 

विचार यह है कि विधि पैराम सह का प्रतिनिधित्व करती है पूर्ण ड्राइंग राज्य।

ध्यान दें कि आकार से अधिक 0.

+0

सरल रिकर्सन को समझने के लिए, प्रत्येक पंक्ति को मुद्रित करने के लिए एक पुनरावर्ती सहायक विधि का उपयोग करना स्पष्ट हो सकता है। यह भी काम करता है, हालांकि। :) –

+0

धन्यवाद, यह काम करता है। मुझे डर था कि मुझे एक से अधिक तर्क विधि जाना पड़ सकता है क्योंकि मेरा प्रोफेसर मुझे बताता है कि कितनी खराब ओवरलोडिंग विधियां हैं (मुझे लगता है कि यह बहुत उपयोगी है)। मुझे आशा है कि वह इसे स्वीकार करेगा। @ जस्टिन एक विधि होना है। यह इसे खींच रहा है लेकिन यह काफी करीब है। –

-1

होना चाहिए मुझे लगता है कि यह काम करना चाहिए ... मेरे सिर के ऊपर से अपरीक्षित।

public void printTriangle(int count) 
{  
    if (count == 0) return; 
    printTriangle(count - 1); 
    for (int x = 1; x <= count; x++) { 
     System.out.print("*"); 
    } 
    System.out.print("\n"); 
} 
+0

यह पुनरावृत्ति का उपयोग करता है। –

+1

शांत लोगो आदमी। !! –

+0

-1 ओपी ने ** एक रिकर्सिव विधि (बिना किसी पुनरावृत्ति के) के लिए पूछा ** **। –

0

आप इस तरह यह कर सकते हैं:

विधि एक पैरामीटर के रूप सितारों की संख्या हो जाता है। आइए इसे कॉल करें।

तो यह:

  1. कॉल ही रिकर्सिवली n-1 के साथ।

  2. एन सितारों के साथ एक पंक्ति मुद्रित करता है।

कुछ भी नहीं करना n == 0.

+0

एन सितारों के साथ एक रेखा को प्रिंट करना पुनरावृत्ति से अलग होने तक पुनरावृत्ति को अलग करता है। –

-1

तो, यदि आप एक छोटे ब्लॉक बनाने की जरूरत है, तो सुनिश्चित करें। उस ब्लॉक को किस जानकारी की आवश्यकता है? बस अधिकतम लेकिन रिकर्सन को यह जानने की जरूरत है कि किस लाइन पर ...आप एक निर्माता के साथ अंत की तरह:

public void printTriangle (int current, int max) 

अब, उपयोग कि प्रत्यावर्तन के बाकी एक साथ रखा करने के लिए:

public void printTriangle (int current, int max) 
{ 
    if (current <= max) 
    { 
     // Draw the line of stars... 
     for (int x=0; x<current; x++) 
     { 
      System.out.print("*") 
     } 
     // add a newline 
     System.out.print("\n"); 

     // Do it again for the next line, but make it 1-bigger 
     printTriangle(current + 1, max); 
    } 
} 

अब, तुम सब करने की ज़रूरत है, है आरंभ:

अपने पुनरावृत्ति दृष्टिकोण में
printTriangle(1, 5); 
+0

लेकिन इसका पुनरावृत्ति है। इसे पूरी तरह से पुनरावृत्ति की आवश्यकता नहीं है। –

+0

इसमें पुनरावृत्ति शामिल है। –

+0

आह .. उस भाग को याद किया। उस स्थिति में, आप केवल एक दूसरा पुनरावृत्ति समारोह होना चाहिए ... हालांकि "उत्तर" के रूप में चिह्नित एक बहुत सुंदर चालाक है। – Jerry

0
package playground.tests; 

import junit.framework.TestCase; 

public class PrintTriangleTest extends TestCase { 
    public void testPrintTriangle() throws Exception { 
     assertEquals("*\n**\n***\n****\n*****\n", printTriangleRecursive(5, 0, 0)); 
    } 

    private String printTriangleRecursive(int count, int line, int character) { 
     if (line == count) 
      return ""; 
     if (character > line) 
      return "\n" + printTriangleRecursive(count, line + 1, 0); 
     return "*" + printTriangleRecursive(count, line, character + 1); 
    } 

} 
0
void trianglePrint(int rows){ 
      int static currentRow = 1; 
      int static currentStar = 1; 

      // enter new line in this condition 
      // (star > currentrow) 

      if (currentStar > currentRow){ 
       currentStar = 1; 
       currentRow++; 
       cout << endl; 
      } 

      if (currentRow > rows){ 
       return; // finish 
      } 

      cout << "*"; 
      currentStar++; 

      trianglePrint(rows); 
     } 
+0

असल में, यह सी ++ में है: ") –

+0

आप किसी भी अन्य भाषा के साथ एक ही अवधारणा का उपयोग कर सकते हैं;) –

संबंधित मुद्दे