ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αναδρομή (1/2)

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Αλγόριθμοι Αναζήτησης
Advertisements

Διαδικασία ανάπτυξης Προσδιορισμός απαιτήσεων Αρχιτεκτονικός Σχεδιασμός Λεπτομερής Σχεδιασμός Κωδικοποίηση Έλεγχος Παράδοση Συστήματος Λειτουργία - Συντήρηση.
Να καταργήσουμε τη ΓΛΩΣΣΑ και να κρατήσουμε μόνο την ψευδογλώσσα
Πολυδιάστατοι Πίνακες, Δομές, Ενώσεις
Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού
Δείκτες, Πίνακες και Δείκτες, Δείκτες σε Συναρτήσεις
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Αντικείμενα ως ορίσματα.
Προγραμματισμός Ι Παράδειγμα: Παράδειγμα:Να γραφεί πρόγραμμα που να δέχεται ως είσοδο κείμενο, να απαριθμεί τις εμφανίσεις των ψηφίων 0-9, τα λευκά διαστήματα.
Αναδρομη και static Γραψετε την συναρτηση sequence_size που διαβαζει μια απροσδιοριστου μεγεθους σειρας και υπολογιζει και τυπωνει το μεγεθος της. int.
Αντικειμενοστραφής Προγραμματισμός
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Συναρτήσεις Κληση/Επιστροφη Παραμετροι
Μήτρες (templates)  Μία μήτρα είναι ένα κομμάτι κώδικα που περιέχει παραμέτρους οι οποίες δέχονται ως τιμές τύπους δεδομένων.  Είναι ένας μηχανισμός.
Αλγόριθμοι και Πολυπλοκότητα
Διαίρει-και-Βασίλευε
Δυναμικός Προγραμματισμός
ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων. Πίνακας Συμβόλων (Symbol Table) (Ι)  Είναι μια δομή στην οποία αποθηκεύονται τα ονόματα ενός προγράμματος και.
Η ΓΛΩΣΣΑ C ΜΑΘΗΜΑ 2.
Δείκτες, Πίνακες σε Δείκτες, Δείκτες σε Συναρτήσεις
Σχεδίαση αλγορίθμων (2ο μέρος)
Διδάσκων: Παύλος Παυλικκάς1 Ολυμπιάδα Πληροφορικής Recursion - Αναδρομή.
1 Ολυμπιάδα Πληροφορικής Μάθημα 7. 2 Στόχοι μαθήματος Δημιουργία συναρτήσεων από το χρήστη Δομή προγράμματος με συναρτήσεις Συναρτήσεις και παράμετροι.
Διδάσκων: Παύλος Παυλικκάς1 Ολυμπιάδα Πληροφορικής Stacks - Στοίβες.
Διαχείριση μνήμης Υπόβαθρο Εναλλαγή Συνεχής κατανομή Σελιδοποίηση
HY Γλώσσες και Μεταφραστές Φροντιστήριο Runtime Environment.
ΣΥΝΑΡΤΗΣΕΙΣ.
Πάνω προς Κάτω Σχεδιασμός και Συναρτήσεις
ΗΥ 150 – ΠρογραμματισμόςΞενοφών Ζαμ π ούλης ΗΥ-150 Προγραμματισμός Δυναμική Διαχείριση Μνήμης (1/2)
Δυναμικη Δεσμευση Μνημης Συνδεδεμενες Λιστες (dynamic memory allocation, linked lists) Πως υλοποιουμαι προγραμματα που δεν γνωριζουμε πριν την εκτελεση.
2-1 Ανάλυση Αλγορίθμων Αλγόριθμος Πεπερασμένο σύνολο εντολών που, όταν εκτελεστούν, επιτυγχάνουν κάποιο επιθυμητό αποτέλεσμα –Δεδομένα εισόδου και εξόδου.
Γιάννης Σταματίου Αναδρομή και αναδρομικές σχέσεις
Ταξινόμηση και Αναζήτηση
Επικοινωνία Ανθρώπου Μηχανής HTML CGI JAVASCRIPT Κουμπούλης Χρήστος Α.Μ. 921 Χαλαβαζής Βασίλης Α.Μ. 988.
Διδακτική της Πληροφορικής ΗΥ302 Εργασία :Παρουσίαση σχολικού βιβλίου Γ’ Λυκείου Τεχνολογικής Κατεύθυνσης «Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον»
ΜΑΘΗΜΑ: ΣΧΕΔΙΑΣΗ ΑΛΓΟΡΙΘΜΩΝ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Παρασκευή, 3 Απριλίου 2015Παρασκευή, 3 Απριλίου 2015Παρασκευή, 3 Απριλίου 2015Παρασκευή, 3 Απριλίου 2015Τμ.
Templates Standard Template Library (STL) Exceptions Μεταπτυχιακό Πρόγραμμα Σπουδών, Τμήμα Εφαρμοσμένης Πληροφορικής.
ΗΥ150 – Προγραμματισμός Ξ. Ζαμπούλης ΗΥ-150 Προγραμματισμός Δομές Δεδομένων.
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ 2: ΘΕΜΑΤΑ ΘΕΩΡΗΤΙΚΗΣ ΕΠΙΣΤΗΜΗΣ Η/Υ
Κεφάλαιο 10 – Υποπρογράμματα
Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ - 4ο εξάμηνο1 Ανάλυση Αλγορίθμων b Θέματα: Ορθότητα Χρονική αποδοτικότητα Χωρική αποδοτικότητα Βελτιστότητα b Προσεγγίσεις:
ΜΑΘ3122/106 – Γλώσσα προγραμματισμούΞενοφών Ζαμπούλης ΜΑΘ3122/106 Γλώσσα προγραμματισμού Συναρτήσεις.
1 ΤΜΗΜΑ ΜΠΕΣ Αλγόριθμοι Αναζήτησης Εργασία 1 Τυφλή Αναζήτηση.
Δομές Δεδομένων 1 Θέματα Απόδοσης. Δομές Δεδομένων 2 Οργανώνοντας τα Δεδομένα  Η επιλογή της δομής δεδομένων και του αλγορίθμου επηρεάζουν το χρόνο εκτέλεσης.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις.
HY Γλώσσες και Μεταφραστές Φροντιστήριο Runtime Environment.
Επιστημονικός Υπολογισμός Ι Πρώτο Εργαστήριο Εισαγωγή στο matlab 15 Οκτωβρίου 2010 Γιώργος Δρακόπουλος ΤΜΗΥΠ.
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι 4-1 Στην ενότητα αυτή θα μελετηθεί η χρήση στοιβών στις εξής εφαρμογές: Αναδρομικές συναρτήσεις Ισοζυγισμός Παρενθέσεων.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Δυναμική Διαχείριση Μνήμης (1/2)
Γλώσσα Προγραμματισμού MicroWorlds Pro
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αλφαριθμητικά (Strings)
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης 1 getchar() /* char_count.c A program to count characters of input. */ main() { int c ; int count = 0; while.
ΗΥ150 – ΠρογραμματισμόςΞενοφών Ζαμπούλης ΗΥ-150 Προγραμματισμός Αναδρομή (1/2)
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις (μέρος δεύτερο) και Μεταβλητές.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Τύποι Μεταβλητών Τελεστές Βασική Είσοδος/Έξοδος.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα.
Γλώσσες Προγραμματισμού Μεταγλωττιστές Πίνακας Συμβόλων Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου.
Πίνακες στην JAVA ΕΡΓΑΣΤΗΡΙΟ AΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ (Διαφάνειες: ΧΟΧΟΛΗΣ ΔΙΟΝΥΣΙΟΣ Προσαρμογή 2014: Κώστας Στάμος)
Αρχεσ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ ΤΑξη Β΄
Συναρτήσεις.
ΜΥΥ105: Εισαγωγή στον Προγραμματισμό
Τεχνολογία και Προγραμματισμός Υπολογιστών
ΣΥΝΑΡΤΗΣΕΙΣ (Functions)
Ενότητα 9: Δείκτες και Δυναμική Διαχείριση Μνήμης.
Εισαγωγή στον Προγ/μό Υπολογιστών
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον ΑΕΠΠ
ΗΥ-150 Προγραμματισμός Αναδρομή (1/2).
Αναδρομή Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:
Μεταγράφημα παρουσίασης:

ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αναδρομή (1/2)

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 2 Κλήσεις Συναρτήσεων Όταν καλείται μια συνάρτηση, πρέπει – Να θυμάται σε ποιο σημείο του προγράμματος θα επιστρέψει – Να δεσμεύσει χώρο για την τιμή που θα επιστρέψει – Να δεσμεύσει χώρο για τα ορίσματα της – Να δεσμεύσει χώρο για τις τοπικές μεταβλητές της Η μνήμη για στατικές και καθολικές μεταβλητές δεσμεύεται από την αρχή της εκτέλεσης του προγράμματος

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 3 Παράδειγμα Stack Frame for function f Επιστρεφόμενη Τιμή (a+x) Διεύθυνση Επιστροφής Ορίσματα x Τοπικές Μεταβλητές: a

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 4 Εμφωλιασμένες Κλήσεις Συναρτήσεων Επιστρεφόμενη Τιμή (a+x) Διεύθυνση Επιστροφής Ορίσματα x Τοπικές Μεταβλητές: a Επιστρεφόμενη Τιμή a+b+c Διεύθυνση Επιστροφής Ορίσματα x Τοπικές Μεταβλητές: a, b, c Stack Frame of g Stack Frame of f

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 5 Η Στοίβα (stack) f() { g() + h(); } g() { m(q()); } main() { f(); }

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 6 Η Στοίβα (stack) f() { g() + h(); } g() { m(q()); } main() { f(); } Frame Stack: main Execution

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 7 Η Στοίβα (stack) f() { g() + h(); } g() { m(q()); } main() { f(); } Frame Stack: main Frame Stack: f Execution

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 8 Η Στοίβα (stack) f() { g() + h(); } g() { m(q()); } main() { f(); } Frame Stack: main Frame Stack: f Frame Stack: g Execution

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 9 Η Στοίβα (stack) f() { g() + h(); } g() { m(q()); } main() { f(); } Frame Stack: main Frame Stack: f Frame Stack: g Frame Stack: q Execution

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 10 Η Στοίβα (stack) f() { g() + h(); } g() { m(q()); } main() { f(); } Frame Stack: main Frame Stack: f Frame Stack: g Frame Stack: q Execution

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 11 Η Στοίβα (stack) f() { g() + h(); } g() { m(q()); } main() { f(); } Frame Stack: main Frame Stack: f Frame Stack: g Execution Frame Stack: m

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 12 Η Στοίβα (stack) f() { g() + h(); } g() { m(q()); } main() { f(); } Frame Stack: main Frame Stack: f Frame Stack: g Execution

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 13 Η Στοίβα (stack) f() { g() + h(); } g() { m(q()); } main() { f(); } Frame Stack: main Frame Stack: f Execution

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 14 Η Στοίβα (stack) f() { g() + h(); } g() { m(q()); } main() { f(); } Frame Stack: main Frame Stack: f Execution Frame Stack: h

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 15 Η Στοίβα (stack) f() { g() + h(); } g() { m(q()); } main() { f(); } Frame Stack: main Frame Stack: f Execution

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 16 Η Στοίβα (stack) f() { g() + h(); } g() { m(q()); } main() { f(); } Frame Stack: main Execution

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 17 Το Δέντρο Κλήσεων των Συναρτήσεων f() { g() + h(); } g() { m(q()); } main() { f(); } main f h mq g Calls Returns

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 18 Πρόγραμμα calltree.c

ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αναδρομή (2/2)

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 20 Γενική Ιδέα Αναδρομής Γιατί σπάμε το πρόγραμμα σε συναρτήσεις; – Κάθε συνάρτηση λύνει ένα «μικρότερο» (υπό)πρόβλημα – Συνδυάζουμε τα μικρότερα προβλήματα με τέτοιο τρόπο που να λύσουμε το συνολικό πρόβλημα – Παράδειγμα: Φτιάξτε ένα πρόγραμμα που να διαχειρίζεται μια βάση δεδομένων με φοιτητές Συναρτήσεις – Για διαχείριση της εισόδου του χρήστη, τι θέλει να κάνει – Για εισαγωγή/διαγραφή/αλλαγή/αναζήτηση στοιχείων – Για εκτύπωση της βάσης δεδομένων – κτλ

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 21 Γενική Ιδέα Αναδρομής Αναδρομική Συνάρτηση είναι μια συνάρτηση που έμμεσα ή άμεσα καλεί τον εαυτό της – Κάθε (κλήση) συνάρτησης λύνει ένα «μικρότερο» (υπό)πρόβλημα του ίδιου τύπου. – Συνδυάζουμε τα μικρότερα προβλήματα με τέτοιο τρόπο που να λύσουμε το συνολικό πρόβλημα – Κάποια στιγμή πρέπει να λύσουμε τα «πολύ μικρά προβλήματα» απευθείας Σε τι μας βοηθάνε οι αναδρομικές συναρτήσεις – Ο κώδικας γίνεται συνήθως πολύ πιο απλός και μπορούμε να λύσουμε πολύ εύκολα προβλήματα που θα φαινόταν πολύ δύσκολα με επανάληψη – Το μέγεθος (γραμμές κώδικα) της συνάρτησης συνήθως «ελαχιστοποιείται»

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 22 Παράδειγμα: Sierpinski Sieve “The Sierpinski sieve is a fractal described by Sierpinski in 1915 and appearing in Italian art from the 13th century” MathWorldfractal Φτιάξτε ένα πρόγραμμα που να παράγει το παρακάτω σχήμα:

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 23 Sierpinski Sieve: Αναδρομική Λύση 1. Ξεκίνα από ένα μαύρο τρίγωνο Τ1 2. «Αφαίρεσε» το τρίγωνο που σχηματίζεται από τις τρεις μέσους των ακμών 3. Επανέλαβε την ίδια διαδικασία στα τρία (υπο)τρίγωνα που σχηματίζονται, ας τα ονομάσουμε Τ 1,1, Τ 1, 2, Τ 1, 3 4. Επανέλαβε αναδρομικά την διαδικασία από το βήμα 2

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 24 (Άμεση) Αναδρομή Τα τρία βασικά συστατικά της αναδρομής Για να λύσουμε ένα πρόβλημα μεγέθους n 1. Η βασική περίπτωση(περιπτώσεις) (base-case): Όταν το n είναι αρκετά μικρό δίνουμε μια άμεση (χωρίς άλλη αναδρομή) λύση του «μικρότερου» προβλήματος 2. Αναδρομική κλήση: σπάσε το πρόβλημα σε «μικρότερα» ίδια προβλήματα και λύσε τα με αναδρομική κλήση (κλήση στην ίδια) συνάρτηση 3. Συγχώνευση: συνδύασε τις λύσεις των μικρότερων προβλημάτων, για να λύσεις το πρόβλημα μεγέθους n Το 3ο βήμα δεν είναι απαραίτητο Το «μέγεθος» του προβλήματος μπορεί να είναι το μέγεθος ενός ορίσματος, το μέγεθος ενός πίνακα, το μέγεθος μιας δομής (π.χ., γράφος), κτλ

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 25 Στοίβα και Αναδρομή Σε αναδρομικές συναρτήσεις η στοίβα μπορεί να περιέχει περισσότερα από ένα stack frames της ίδιας συνάρτησης Η αναδρομή είναι θεϊκή αλλά η κλήση συνάρτησης κοστίζει Κάθε αναδρομική συνάρτηση μπορεί να υλοποιηθεί και επαναληπτικά (χωρίς αναδρομή) με χρήση στοίβας

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 26 Παράδειγμα 1 int power(int x, int n) { if (n == 0) return 1; else return (x * power(x, n-1)); } Βασική Περίπτωση: το μικρότερο πρόβλημα, άμεση λύση Λύσε αναδρομικά ένα μικρότερο πρόβλημα Συγχώνευση λύσεων μικρότερων προβλημάτων Το «μέγεθος/δυσκολία» του προβλήματος καθορίζεται από τον εκθέτη

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 27 Παράδειγμα 1: Επαναληπτική Λύση int power( int x, int n) { int i = 1; int result = 1; /* check for n >= 0 */ for ( i = 1; i <= n; i++) { result *= x; } return result; }

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 28 Παράδειγμα 2 int factorial( int n) { if ( n <= 1) return 1; else return n*factorial(n-1); } ΠΡΟΣΟΧΗ: η power και factorial δεν ενδείκνυνται για αναδρομική υλοποίηση, τις παρουσιάζω μόνο ως παραδείγματα.

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 29 Ακολουθία Fibonacci Κάθε αριθμός είναι άθροισμα των δύο προηγούμενων του! Δηλαδή f(n)=f(n-1)+f(n-2) Αρκεί αυτό; f(1)=1, f(0)=0, f(n) ορίζεται για n≥0

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 30 Ακολουθία Fibonacci f( 3 ) f( 1 ) f( 2 ) f( 1 )f( 0 )return 1 return 0 return + + Κάθε αριθμός είναι άθροισμα των δύο προηγούμενων του! Δηλαδή f(n)=f(n-1)+f(n-2)

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 31 Ακολουθία Fibonacci 1/* Fig. 5.15: fig05_15.c 2 Recursive fibonacci function */ 3#include 4 5long fibonacci( long ); 6 7int main() 8{8{ 9 long result, number; printf( "Enter an integer: " ); 12 scanf( "%ld", &number ); 13 result = fibonacci( number ); 14 printf( "Fibonacci( %ld ) = %ld\n", number, result ); 15 return 0; 16} 17 18/* Recursive definition of function fibonacci */ 19long fibonacci( long n ) 20{ 21 if ( n == 0 || n == 1 ) 22 return n; 23 else 24 return fibonacci( n - 1 ) + fibonacci( n - 2 ); 25}

ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 32 Άλλα παραδείγματα Πως θα λύναμε αναδρομικά – Υπολογισμός συναρτήσεων που δίδονται από αναδρομική σχέση, λ.χ. fibonacci – Αναζήτηση – Ταξινόμηση – Βρες την έξοδο από τον λαβύρινθο – Φτιάξε ένα fractal δέντρο