Makelios Δημοσ. 19 Νοεμβρίου 2017 Δημοσ. 19 Νοεμβρίου 2017 Καλησπερα παιδια! Εχω μια ασκηση για java που μου ζηταει να ξαναγραψω μια υπορουτινα, που υπαρχει σε παραδειγμα, με μη αναδρομικό τρόπο. Μπορει να μου πει καποιος τι σημαινει "μη αναδρομικός τρόπος" ή πως να το ψαξω?
Moderators Kercyn Δημοσ. 19 Νοεμβρίου 2017 Moderators Δημοσ. 19 Νοεμβρίου 2017 Αναδρομική είναι μια συνάρτηση η οποία καλεί τον εαυτό της. Μη αναδρομική είναι εκείνη η οποία δεν τον καλεί.
παπι Δημοσ. 19 Νοεμβρίου 2017 Δημοσ. 19 Νοεμβρίου 2017 Αναδρομική συνάρτηση σημαίνει ότι λουπαρει καλώντας τον εαυτό της. Άρα εσύ θα φτιάξεις την ίδια συνάρτηση, μόνο που θα έχει λουπ μέσα, for,while
Makelios Δημοσ. 19 Νοεμβρίου 2017 Μέλος Δημοσ. 19 Νοεμβρίου 2017 Ευχαριστω πολυ για τις απαντησεις! Αλλα μαλλον δεν το πολυπιανω. Επισυναπτω το εν λογο παραδειγμα. Τι κασταστει αυτη την υπορουτινα αναδρομική?
Moderators Kercyn Δημοσ. 19 Νοεμβρίου 2017 Moderators Δημοσ. 19 Νοεμβρίου 2017 Το ότι καλεί τον εαυτό της... 1
Makelios Δημοσ. 19 Νοεμβρίου 2017 Μέλος Δημοσ. 19 Νοεμβρίου 2017 Ευχαριστω πολυ! Συγνωμη για τις μαλλον χαζες ερωτησεις, προσπαθω να μπω στο νοημα. 1
tsofras Δημοσ. 19 Νοεμβρίου 2017 Δημοσ. 19 Νοεμβρίου 2017 Ευχαριστω πολυ! Συγνωμη για τις μαλλον χαζες ερωτησεις, προσπαθω να μπω στο νοημα. Δεν υπάρχουν χαζές ερωτήσεις. Καλά έκανες και ρώτησες και αν θές επιβεβαίωση για την απάντηση αφού την βρείς εδώ είμαστε. Αρκεί που δεν έκανες το κλασσικό που κάνουν οι πολλοί να ζητήσεις την απάντηση στην ερώτηση. 1
Makelios Δημοσ. 20 Νοεμβρίου 2017 Μέλος Δημοσ. 20 Νοεμβρίου 2017 δηλαδη αν αντικαταστησω τα return treeContrains με εκτυπωση μηνυματος για παραδειγμα, παυει να ειναι αναδρομικη?
Moderators Kercyn Δημοσ. 20 Νοεμβρίου 2017 Moderators Δημοσ. 20 Νοεμβρίου 2017 δηλαδη αν αντικαταστησω τα return treeContrains με εκτυπωση μηνυματος για παραδειγμα, παυει να ειναι αναδρομικη? Ναι, όπως παύει επίσης να είναι και σωστή.
djcat Δημοσ. 20 Νοεμβρίου 2017 Δημοσ. 20 Νοεμβρίου 2017 Ρίξε μια ματιά εδώ. https://www.topcoder.com/community/data-science/data-science-tutorials/an-introduction-to-recursion-part-1/ 1
solarpower Δημοσ. 20 Νοεμβρίου 2017 Δημοσ. 20 Νοεμβρίου 2017 @Makelios Όταν έχουμε αναδρομική συνάρτηση-ρουτίνα (όπως θες πες το) πρέπει να ορίζουμε το τρόπο που θα πάψει η αναδρομή. Η συνθήκη αυτή σε κάθε κλήση ελέγχεται. Άρα για να γυρίσει μια τέτοια ρουτίνα σε μη αναδρομική θα χρειαστούμε μια επανάληψη με μια συνθήκη. Δες όμως το πρόβλημα: Όταν καλούμε την αναδρομική συνάρτηση εκμεταλλευόμαστε το γεγονός ότι ορίζουμε τοπικές μεταβλητές σε κάθε κλήση, για μερικά αποτελέσματα, και στην επιστροφή δημιουργούμε το τελικό αποτέλεσμα. Όταν λοιπόν θέλουμε μια επανάληψη με μια συνθήκη να κάνει την ίδια δουλειά, πρέπει να βρούμε άλλο τρόπο να σώνουμε μερικά αποτελέσματα. Κάθε πρόβλημα έχει τη δική του λύση, ανάλογα με το τι εννοεί "μερικό αποτέλεσμα". Πχ σε μια αναδρομική συνάρτηση που δίνει το παραγοντικό του Ν θα έχει μερικό αποτέλεσμα το Ν-1, οπότε αρκεί να το δίνουμε στην νέα κλήση (την εσωτερική θα λέγαμε), ενώ θα έχουμε μια συνθήκη που θα τσεκάρει το Ν αν είναι μεγαλύτερο από 0 και αν όχι θα δίνει το 1. Όταν θέλεις να ξεκινάς από μια ρίζα δένδρου σε ενδιαφέρει για κάθε κόμβο να ελέγχεις όλους τους κλάδους, άρα όταν τελειώνεις με ένα κόμβο να γυρνάς στον προηγούμενο εκτός και αν είσαι στη ρίζα οπότε τερματίζεις! Αυτό σημαίνει ότι πρέπει να κρατάς τους προηγούμενους κόμβους . Άρα το πρόβλημα πάει στο πώς βάζω κάτι και το διαβάζω με ανάποδη φορά, δηλαδή πώς το τελευταίο που βάζω το διαβάζω πρώτο. Μέχρι εδώ έχεις καμία ιδέα; 1
Makelios Δημοσ. 20 Νοεμβρίου 2017 Μέλος Δημοσ. 20 Νοεμβρίου 2017 Δηλαδη θα μπορουσα να φτιαξω μια επαναληψη 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
defacer Δημοσ. 20 Νοεμβρίου 2017 Δημοσ. 20 Νοεμβρίου 2017 Αν εξαιρέσεις κάτι συνθήκες και ότι αποφάσισε αν θα χρησιμοποιείς το root ή το runner (δεν υπάρχει λόγος για runner απλά παίζε με το root, και μη το λες root πές το node και όλα καλά), αυτό είναι που θες ναι.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα