Προς το περιεχόμενο

Χρήση αναδρομής σε μέθοδο της JAVA


free4you

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Καλησπέρα παιδιά

 

Θέλω να υλοποιήσω τις παρακάτω 2 μεθόδους με αναδρομή αλλά με έχουν δυσκολέψει αρκετά!!! Την δεύτερη την δουλεύω και νομίζω ότι βγαίνει αλλά για την πρώτη δεν έχω ιδέα ποια αναδρομική συνάρτηση μπορεί να δουλεύει με αυτό τον τρόπο... Κάθε βοήθεια ευπρόσδεκτη...

 

1η Μέθοδος:

 

public static void print_p(int k, int i)

Το k είναι δύναμη του 2. Η μεγαλύτερη γραμμή του πρότυπου έχει k αστερίσκους αρχίζοντας
από τη στήλη i. Για παράδειγμα το παρακάτω πρότυπο έχει φτιάχνεται με κλήση της μεθόδου
print_p(8,0).

 

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

 

2η Μέθοδος:

 

Εκτύπωση δυαδικού αριθμού. Μέθοδος η οποία θα τυπώνει την τιμή ενός μη αρνητικού ακέραιου σε δυαδική μορφή.

Π.χ  n=11 θα τυπώνει 1011
        n=45 θα τυπώνει 101101
        n=64 θα τυπώνει 1000000

 


Ευχαριστώ...

Επεξ/σία από free4you
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Η πρώτη θα γίνει με αναδρομή δύο φορές μέσα στη συνάρτηση. Σα να λέμε

void whatever(int n)
{
    if (/* συνθήκη τερματισμού αναδρομής */) return;
    whatever(n / 2);
    /* και κάνεις κάτι ακόμα εδώ */
    whatever(n / 2);
}

Μην το κάνεις copy paste, το δίνω ενδεικτικά.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Σε ευχαριστώ πολύ για την απάντηση αλλά δυστυχώς δεν κατάλαβα τι μου λες ότι χρειάζεται να κάνω!!! Βασικά δεν μπορώ να καταλάβω καν τι είναι αναδρομικό στο σχήμα παράδειγμα!!! σίγουρα υπάρχει ένα σχήμα που επαναλαμβάνεται ενδιάμεσα από τις δυνάμεις του 2 αλλά μέχρι εκεί!!!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Εδώ τυπώνεις ένα αστεράκι, μετά μια γραμμή και μετά πάλι ένα αστεράκι. Τελικό αποτέλεσμα ένα "μικρό S":

*
* *
  *

Εδώ τυπώνεις ένα μικρό S, μετά μια γραμμή και μετά πάλι ένα μικρό S. Τελικό αποτέλεσμα ένα μεσαίο S:

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

Αν δεις πιο μακριά τότε μεσαίο S + γραμμή + μεσαίο S = μεγάλο S. Και πάει λέγοντας.

 

Οπότε έχεις μια συνάρτηση που τυπώνει τα S διαφόρων μεγεθών, και για να τυπώσεις το μέγεθος Χ τυπώνεις μέγεθος Χ - 1 + γραμμή + πάλι μέγεθος Χ - 1. Το "τυπώνω μέγεθος Χ - 1" είναι η αναδρομή.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Προέκυψε και άλλο πρόβλημα!!!

 

Γράφω αυτό για (4,8):

 

 public static void trigono(int m, int n)
            
{     
if (m<n){
for (int i = 0; i < m; i++)
System.out.print("*");
System.out.print("\n");
trigono(m+1, n);
}
else if (m==n){
for (int i = 0; i < m; i++)
System.out.print("*");
System.out.print("\n");
trigono(m-1, n);

}
}
 

 

Θέλω αυτό:

 

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

 

Και μου εμφανίζει αυτό:

 

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

 

Τι κάνω λάθος??? Δεν καλώ σωστά την αναδρομή? Συντακτικό δεν πρέπει να είναι, μάλλον στην ιδέα είναι το πρόβλημα ε???

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ναι. Ξεκίνα εξηγώντας φωναχτά για ποιό ακριβώς λόγο χρειάζεσαι 2 μεταβλητές αντί για απλά μία.

 

Γιατί πιστεύεις ότι αυτό είναι το πρόβλημα και όχι πχ ότι είναι λάθος οι συνθήκες του; 

 

Δεν αντιλέγω ότι δεν θα δούλευε και με μία, αν και δεν σκέφτομαι πρόχειρα πως θα δούλευε και θα ήταν το min και το max του τριγώνου διαθέσιμα να τα ορίζει ο χρήστης. (χωρίς την προσθήκη μεταβλητών στην κλάση obv.)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Γιατί πιστεύεις ότι αυτό είναι το πρόβλημα και όχι πχ ότι είναι λάθος οι συνθήκες του; 

 

Δεν αντιλέγω ότι δεν θα δούλευε και με μία, αν και δεν σκέφτομαι πρόχειρα πως θα δούλευε και θα ήταν το min και το max του τριγώνου διαθέσιμα να τα ορίζει ο χρήστης. (χωρίς την προσθήκη μεταβλητών στην κλάση obv.)

 

Πιστεύω πως το πρόβλημα είναι ότι δεν έχει ξεκάθαρη ιδέα στο μυαλό του για το τι κάνει, οπότε get him talking.

 

Επίσης αν το min του τριγώνου είναι > 1 τότε δε θα είναι τρίγωνο...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ναι. Ξεκίνα εξηγώντας φωναχτά για ποιό ακριβώς λόγο χρειάζεσαι 2 μεταβλητές αντί για απλά μία.

 

Τις 2 μεταβλητές της θέλω σαν min, max για να ορίσω πόσα αστεράκια θα έχει η πρώτη σειρά και να αυξάνω κατά 1 σε κάθε επόμενη μέχρι αυτά να γίνουν ίσα και να αρχίσουν να μειώνονται μέχρι να φτάσει πάλι στο min. Καλά δεν το σκέφτομαι???

void trigono(int m, int n)  //m<n
		{
			print(m);  // m φορες
			if(m == n - 1)
				print(Ν);  // Ν φορες
			else
				trigono(m+1, n);
			print(m);  // m φορες
		}

 

Αυτό δεν νομίζω ότι κάνει αυτό που θέλω...

Εννοείς θα είναι ενα τρίγωνο πάνω σε ένα ορθογώνιο ? Αν ναι οκ νομίζω απλά προσπαθεί να φτιάξει κάτι που να είναι συμμετρικό με μια κορυφη.

 

Προσπαθώ να φτιάξω κάτι με αρχική υπόθεση ότι m<n η συνάρτηση θα τυπώνει 2(n-m)+1 γραμμές με αστερίσκους όπου η

πρώτη γραμμή έχει m αστερίσκους η επόμενη m+1 μέχρι τη γραμμή με n αστερίσκους. Μετά

επαναλαμβάνεται μειώνοντας κατά 1 τους αστερίσκους μέχρι να γίνουν m.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...