PotirasK.O Δημοσ. 13 Ιουνίου 2010 Δημοσ. 13 Ιουνίου 2010 μπορει κανεις να μου εξηγησει την παρακατω αναδρομικη συναρτηση ??? > void func(int n) { if (n>0) { func(n-3); printf(“%d ”,n); func(n-2); } }
V.I.Smirnov Δημοσ. 13 Ιουνίου 2010 Δημοσ. 13 Ιουνίου 2010 Για να καταλάβεις πώς δουλεύει πάρε ένα μικρό n , πχ. n=5, και δες τι δίνει με χαρτί και μολύβι. Η συνθήκη τερματισμού είναι η n==0. Kαι η επεξεργασία που γίνεται για την αναγωγή του πρόβλήματος σε μικρότερο είναι οι κλήσεις για n-3 και n-2...
PotirasK.O Δημοσ. 13 Ιουνίου 2010 Μέλος Δημοσ. 13 Ιουνίου 2010 αντε γεια μας. εννοειται πως το εκανα και εβγαζα λαθος αποτελεσματα αλλιως θα εκανα ποστ ρε παιδια?? οταν το τρεχω στον builder αλλα μου βγαζει.
V.I.Smirnov Δημοσ. 13 Ιουνίου 2010 Δημοσ. 13 Ιουνίου 2010 To πρόγραμμα πρέπει να τρέχει σωστά διότι η συνάρτηση είναι πολύ απλή. Ο φίλος πιθανόν δεν έχει καταλάβει την σειρά των κλήσεών της και περιμένει διαφορετικό αποτέλεσμα από αυτό που βλέπει...
PotirasK.O Δημοσ. 13 Ιουνίου 2010 Μέλος Δημοσ. 13 Ιουνίου 2010 To πρόγραμμα πρέπει να τρέχει σωστά διότι η συνάρτηση είναι πολύ απλή.Ο φίλος πιθανόν δεν έχει καταλάβει την σειρά των κλήσεών της και περιμένει διαφορετικό αποτέλεσμα από αυτό που βλέπει... ε ναι εχεις δικιο. μπορει καποιος να μου εξηγησει την σειρα με την οποια εκτελουνται ???
parsifal Δημοσ. 14 Ιουνίου 2010 Δημοσ. 14 Ιουνίου 2010 μπορει καποιος να μου εξηγησει την σειρα με την οποια εκτελουνται ??? Έστω ότι καλείς κάπου μέσα στο πρόγραμμά σου την func με παράμετρο 4: > func(4); Αντικατέστησε με τον κώδικα της func: > if(4 > 0) { func(4 - 3); printf("%d ", 4); func(4 - 2); } Ξανά αντικατέστησε όπου βλέπεις κλήση της func με τον αντίστοιχο κώδικα, εκτός από τις περιπτώσεις που το όρισμα της func είναι αριθμός <= 0 και συνέχισε ούτω καθεξής: > if(4 > 0) { if(4 - 3 > 0) { func(4 - 3 - 3); printf("%d ", 4 - 3); func(4 - 3 - 2); } printf("%d ", 4); if(4 - 2 > 0) { func(4 - 2 - 3); printf("%d ", 4 - 2); func(4 - 2 - 2); } }
V.I.Smirnov Δημοσ. 14 Ιουνίου 2010 Δημοσ. 14 Ιουνίου 2010 Κάνε αυτό που σου είπα. Δες τι δίνει με χαρτί και μολύβι για κάποιο μικρό n, πχ. n=8. Η σειρά είναι ότι για κάθε κλήση, δηλ. για κάθε n, εκτελούνται πρώτα όλοι οι κλάδοι f(n-2). Mόλις τερματιστεί κάποιος κλάδος f(n-2), εκτελείται o f(n-3) που μπορεί να περιέχει εκ νέου f(n-2) και όμοια. Γι' αυτό μπερδεύεσαι. Φτιάξε ένα διάγραμμα (κάτι σαν δέντρο) με τις κλήσεις σύμφωνα με την παραπάνω σειρά αλλιώς δεν μπορείς να το αντιληφθείς εύκολα.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.