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

ερωτηση για java2


Makelios

Ερώτηση

Καλησπερα παιδια! Εχω μια ασκηση για java που μου ζηταει να ξαναγραψω μια υπορουτινα, που υπαρχει σε παραδειγμα, με μη αναδρομικό τρόπο. Μπορει να μου πει καποιος τι σημαινει "μη αναδρομικός τρόπος" ή πως να το ψαξω?

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

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

  • 0

Αναδρομική συνάρτηση σημαίνει ότι λουπαρει καλώντας τον εαυτό της.

 

Άρα εσύ θα φτιάξεις την ίδια συνάρτηση, μόνο που θα έχει λουπ μέσα, for,while

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Ευχαριστω πολυ για τις απαντησεις! Αλλα μαλλον δεν το πολυπιανω. Επισυναπτω το εν λογο παραδειγμα. Τι κασταστει αυτη την υπορουτινα αναδρομική?

post-295693-0-33896000-1511116025_thumb.jpg

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Ευχαριστω πολυ! Συγνωμη για τις μαλλον χαζες ερωτησεις, προσπαθω να μπω στο νοημα.

 

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

  • Like 1
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

δηλαδη αν αντικαταστησω τα return treeContrains με εκτυπωση μηνυματος για παραδειγμα, παυει να ειναι αναδρομικη?

 

Ναι, όπως παύει επίσης να είναι και σωστή.

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

@Makelios

Όταν έχουμε αναδρομική συνάρτηση-ρουτίνα (όπως θες πες το) πρέπει να ορίζουμε το τρόπο που θα πάψει η αναδρομή. Η συνθήκη αυτή σε κάθε κλήση ελέγχεται. Άρα για να γυρίσει μια τέτοια ρουτίνα σε μη αναδρομική θα χρειαστούμε μια επανάληψη με μια συνθήκη. Δες όμως το πρόβλημα: Όταν καλούμε την αναδρομική συνάρτηση εκμεταλλευόμαστε το γεγονός ότι ορίζουμε τοπικές μεταβλητές σε κάθε κλήση, για μερικά αποτελέσματα, και στην επιστροφή δημιουργούμε το τελικό αποτέλεσμα. Όταν λοιπόν θέλουμε μια επανάληψη με μια συνθήκη να κάνει την ίδια δουλειά, πρέπει να βρούμε άλλο τρόπο να σώνουμε μερικά αποτελέσματα. Κάθε πρόβλημα έχει τη δική του λύση, ανάλογα με το τι εννοεί "μερικό αποτέλεσμα". Πχ σε μια αναδρομική συνάρτηση που δίνει το παραγοντικό του Ν θα έχει μερικό αποτέλεσμα το Ν-1, οπότε αρκεί να το δίνουμε στην νέα κλήση (την εσωτερική θα λέγαμε), ενώ θα έχουμε μια συνθήκη που θα τσεκάρει το Ν αν είναι μεγαλύτερο από 0 και αν όχι θα δίνει το 1. Όταν θέλεις να ξεκινάς από μια ρίζα δένδρου σε ενδιαφέρει  για κάθε κόμβο να ελέγχεις όλους τους κλάδους, άρα όταν τελειώνεις με ένα κόμβο να γυρνάς στον προηγούμενο εκτός και αν είσαι στη ρίζα οπότε τερματίζεις! Αυτό σημαίνει ότι πρέπει να κρατάς τους προηγούμενους κόμβους . Άρα το πρόβλημα πάει στο πώς βάζω κάτι και το διαβάζω με ανάποδη φορά, δηλαδή πώς το τελευταίο που βάζω το διαβάζω πρώτο. Μέχρι εδώ έχεις καμία ιδέα;

  • Like 1
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Δηλαδη θα μπορουσα να φτιαξω μια επαναληψη while ,για παραδειγμα ,που τρεχει οσο το αντικειμενο που ψαχνω δεν ειναι στο κομβο που ελεγχω?


static boolean treeContainsNR( TreeNode root, String item){           
 
TreeNode runner;
runner=root
while (root.item!=item);
      if (root==null) {
         return false;
      }
      else if (item.equals(root.item)) {
           return true;
      }
      else if (item.compareTo(root.item) < 0){
           runner=runner.left;
      }
      else {
           runner=runner.right;
      {
}
 
 
Ειμαι στη σωστη κατευθνση ή σκεφτομαι ασυναρτησιες? xD
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Αν εξαιρέσεις κάτι συνθήκες και ότι αποφάσισε αν θα χρησιμοποιείς το root ή το runner (δεν υπάρχει λόγος για runner απλά παίζε με το root, και μη το λες root πές το node και όλα καλά), αυτό είναι που θες ναι.

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

@Makelios

Όχι δεν είσαι Ok γιατί τι θα γίνει σε περίπτωση που έχουμε root=null ενώ ελέγχεις το root.item;

Άρα πράγματι πρέπει να βάλεις τις συνθήκες σωστά! Πάντως εδώ δεν χρειάζεται να κρατάς στοίβα για επιστροφή και αυτό το κατάλαβες! Το Root επειδή το δίνεις by value δεν σε πειράζει να το πειράξεις μέσα στη συνάρτηση, άρα το runner δεν το χρειάζεσαι.

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

Εγγραφείτε για έναν νέο λογαριασμό

Σύνδεση

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

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

Με την περιήγησή σας στο insomnia.gr, αποδέχεστε τη χρήση cookies που ενισχύουν σημαντικά την εμπειρία χρήσης.