Διάλεξη 15η: Αναδρομή, μέρος 1ο

Σχετικά έγγραφα
Προγραµµατισµός. Αναδροµή (1/2)

Προγραμματισμός Αναδρομή

Προγραμματισμός Αναδρομή

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Ανάπτυξη και Σχεδίαση Λογισμικού

Διάλεξη 11η: Δείκτες, μέρος 1

Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1

Προγραμματισμός Ι (ΗΥ120)

Εισαγωγή στον Προγραμματισμό

Προγραμματισμός Υπολογιστών με C++

Διάλεξη 18η: Διαχείρηση Αρχείων

Διάλεξη 10η: Πολυδιάστατοι Πίνακες

Διάλεξη 5η: Εντολές Επανάληψης

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

Προγραμματισμός ΙI (Θ)

Ανάπτυξη και Σχεδίαση Λογισμικού

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

Ενδεικτικές λύσεις και στατιστικά

Διάλεξη 9η: Πίνακες (arrays)

Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C (2)

Δομημένος Προγραμματισμός

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Η πολυνηματική γλώσσα προγραμματισμού Cilk

Ανάπτυξη και Σχεδίαση Λογισμικού

Προγραμματισμός Η/Υ (ΤΛ2007 )

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 6 Ο. Συναρτήσεις Τοπικές, καθολικές, στατικές μεταβλητές Μεταβλητές τύπου extern και register Αναδρομή

Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C (2)

Οι συναρτήσεις στη γλώσσα C

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Δομημένος Προγραμματισμός (ΤΛ1006)

Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 22η: Επιπλέον στοιχεία της C

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου Θέµα 1. (α') 2 - ii 3 - iii 4 - iv

Η βασική συνάρτηση προγράμματος main()

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Διάλεξη 12η: Δείκτες, μέρος 2

Ανάπτυξη και Σχεδίαση Λογισμικού

Ηβασικήσυνάρτηση προγράμματος main()

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. Δείκτες (Διάλεξη 14)

Διάλεξη 21η: Απλά Συνδεδεμένες Λίστες

Αναδρομή Ανάλυση Αλγορίθμων

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Διδάσκων: Παναγιώτης Ανδρέου

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Εισαγωγή στον Προγραμματισμό (με. τη C)

Διδάσκων: Παναγιώτης Ανδρέου

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Αναδροµικές Συναρτήσεις Χειµερινό Εξάµηνο 2014

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Κεφάλαιο V: Δομές και ενώσεις. 5.1 Δομές.

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα "Αλφαριθμητικά"

Μεθόδων Επίλυσης Προβλημάτων

ΣΥΝΑΡΤΗΣΕΙΣ (Functions)

Εισαγωγή στον Προγραμματισμό

Εισαγωγή στον δομημένο προγραμματισμό

Προγραμματισμός Η/Υ. Ενότητα 7: Συναρτήσεις

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

ΣΧΕΔΙΑΣΗ ΚΑΙ ΥΛΟΠΟΙΗΣΗ ΛΟΓΙΣΜΙΚΟΥ

Δομές Δεδομένων και Αλγόριθμοι

Αναδρομή (Recursion) Πώς να λύσουμε ένα πρόβλημα κάνοντας λίγη δουλειά και ανάγοντας το υπόλοιπο να λυθεί με τον ίδιο τρόπο.

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός ΙI (E)

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Υπολογιστών με C++

Διάλεξη 19η: Δομές δεδομένων

Η βασική λειτουργία σε όλες αυτές τις συναρτήσεις είναι η εκτύπωση γραµµών.

Σε γενικές γραμμές, είναι καλή πρακτική να γράϕουμε προγράμματα C που αποτελούνται από πολλές και μικρές συναρτήσεις, παρά από λίγες και μεγάλες.

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών

double sum(double a, double b) { return(a+b); } double my_avg(double a, double b) { return(sum(a, b)/2.0); }

Διδάσκων: Παναγιώτης Ανδρέου

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Β' Περιόδου Θέµα 1. (α')

Προγραμματισμός Ι (ΗΥ120)

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

Προγραμματισμός Η/Υ (ΤΛ2007 )

Διάλεξη 17η: Ταξινόμηση και Αναζήτηση

Προγραμματισμός H/Y Ενότητα 5: Συναρτήσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Προγραμματισμός Ι (ΗΥ120)

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός (ΤΛ1006)

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. (Διάλεξη 14) Παράδειγμα: Αλλαγή τιμής μεταβλητής μόνο τοπικά

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

12. Συναρτήσεις (Μέρος ΙI)

Διάλεξη 8η: Αλφαριθμητικά (strings)

Μεθόδων Επίλυσης Προβλημάτων

Αναδρομικός αλγόριθμος

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύ

Transcript:

Διάλεξη 15η: Αναδρομή, μέρος 1ο Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Αναδρομή I CS100, 2016-2017 1 / 8

Κλήσεις συναρτήσεων Όταν καλείται μια συνάρτηση, πρέπει Να θυμάται σε ποιο σημείο του προγράμματος θα επιστρέψει Να δεσμεύσει χώρο για την τιμή που θα επιστρέψει Να δεσμεύσει χώρο για τα ορίσματα της Να δεσμεύσει χώρο για τις τοπικές μεταβλητές της Η μνήμη για στατικές και καθολικές μεταβλητές δεσμεύεται από την αρχή της εκτέλεσης του προγράμματος Πρατικάκης (CSD) Αναδρομή I CS100, 2016-2017 2 / 8

Παράδειγμα stack-framec int f(int a) { return a + 2; return (f(b) + 3); int y = g(10);

stack-framec int f(int a) { return a + 2; return (f(b) + 3); int y = g(10);

stack-framec int f(int a) { return a + 2; return (f(b) + 3); int y = g(10); f

stack-framec int f(int a) { return a + 2; return (f(b) + 3); int y = g(10); f

stack-framec int f(int a) { return a + 2; return (f(b) + 3); int y = g(10);

stack-framec int f(int a) { return a + 2; return (f(b) + 3); int y = g(10); g

stack-framec int f(int a) { return a + 2; return (f(b) + 3); int y = g(10); g

stack-framec int f(int a) { return a + 2; return (f(b) + 3); int y = g(10); g f

stack-framec int f(int a) { return a + 2; return (f(b) + 3); int y = g(10); g f

stack-framec int f(int a) { return a + 2; return (f(b) + 3); int y = g(10); g

stack-framec int f(int a) { return a + 2; return (f(b) + 3); int y = g(10);

Το δέντρο κλήσεων cgc int m(int); int n(); int h(); int g() { m(n()); void f() { g() + h(); g f h void () { f (); m n Πρατικάκης (CSD) Αναδρομή I CS100, 2016-2017 4 / 8

Αναδρομή Γιατί σπάμε το πρόγραμμα σε συναρτήσεις; Κάθε συνάρτηση λύνει ένα μικρότερο υποπρόβλημα Συνδυάζουμε τα μικρότερα προβλήματα με τέτοιο τρόπο που να λύσουμε το συνολικό πρόβλημα Παράδειγμα: Φτιάξτε ένα πρόγραμμα που να διαχειρίζεται μια βάση δεδομένων με φοιτητές Συνάρτηση για διαχείριση της εισόδου του χρήστη Συνάρτηση για εισαγωγή/διαγραφή/αλλαγή/αναζήτηση στοιχείων Συνάρτηση για εκτύπωση της βάσης δεδομένων κλπ Πρατικάκης (CSD) Αναδρομή I CS100, 2016-2017 5 / 8

Αναδρομή (2) Αναδρομική Συνάρτηση είναι μια συνάρτηση που έμμεσα ή άμεσα καλεί τον εαυτό της Κάθε υπο-κλήση μιας συνάρτησης λύνει ένα μικρότερο υπο-πρόβλημα του ίδιου τύπου Συνδυάζουμε τα μικρότερα προβλήματα με τέτοιο τρόπο που να λύσουμε το συνολικό πρόβλημα Λύνουμε τα πολύ μικρά προβλήματα απευθείας Που χρησιμεύουν οι αναδρομικές συναρτήσεις Ο κώδικας γίνεται συνήθως πολύ πιο απλός Λύνει πολύ εύκολα προβλήματα που θα φαινόταν πολύ δύσκολα με επανάληψη Το μέγεθος σε γραμμές κώδικα της συνάρτησης συνήθως ελαχιστοποιείται Πρατικάκης (CSD) Αναδρομή I CS100, 2016-2017 6 / 8

Παράδειγμα: Fibonacci Αριθμοί Fibonacci 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, Πρατικάκης (CSD) Αναδρομή I CS100, 2016-2017 7 / 8

: Fibonacci Αριθμοί Fibonacci 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, Ορισμός της ακολουθίας Ο πρώτος αριθμός Fibonacci είναι το 0 Ο δεύτερος αριθμός Fibonacci είναι το 1 Για n > 1, ο n-οστός αριθμός Fibonacci είναι το άθροισμα των 2 προηγούμενων Αναδρομικός ορισμός F 0 = 0 F 1 = 1 F n = F n 1 + F n 2 Πρατικάκης (CSD) Αναδρομή I CS100, 2016-2017 7 / 8

: Fibonacci (2) fibonaccic #include<stdlibh> #include<stdioh> int fib(int n) { if(n == 0) { return 0; if(n == 1) { return 1; return (fib(n-1) + fib(n-2)); int (int argc, char **argv) { int n; if(argc!= 2) { printf( usage: %s <number>\n, argv[0]); exit(0); n = atoi(argv[1]); printf( The %d-th Fibonacci number is %d\n, n, fib(n)); Πρατικάκης (CSD) Αναδρομή I CS100, 2016-2017 8 / 8