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

ερωτηση για java2


Makelios

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

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

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

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

 

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

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

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

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

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

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

 

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

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

  • 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 και όλα καλά), αυτό είναι που θες ναι.

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

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

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

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

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

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

Σύνδεση

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

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