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

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

Δημοσ.

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

  • Moderators
Δημοσ.

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

Δημοσ.

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

 

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

Δημοσ.

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

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

Δημοσ.

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

 

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

  • Like 1
Δημοσ.

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

  • Moderators
Δημοσ.

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

 

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

Δημοσ.

@Makelios

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

  • Like 1
Δημοσ.

Δηλαδη θα μπορουσα να φτιαξω μια επαναληψη 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
Δημοσ.

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

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

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

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

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

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

Σύνδεση

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

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