advanced c programming -recursion

24
ΠΟΛΥΤΕΧΝΕΙΟ ΚΡΗΤΗΣ - ΗΜΜΥ Εργαστήριο Διανεμημένων Πληροφοριακών Συστημάτων & Εφαρμογών Δομημένος Προγραμματισμός (ΠΛΗ 102) Αναδρομή - Παραδείγματα

Upload: xrhstoskoaksdokf

Post on 16-Nov-2015

30 views

Category:

Documents


1 download

DESCRIPTION

Recursion examples in advanced C programming (Computer Science)

TRANSCRIPT

Slide 1Δομημνος Προγραμματισμς
(ΠΛΗ 102)
Αναδρομ - Παραδεγματα
Περιεχμενα
*
*
Πολυτεχνεο Κρτης – Τμμα ΗΜΜΥ Εργαστριο Διανεμημνων Πληροφοριακν Συστημτων & Εφαρμογν
Γρψτε μα αναδρομικ συνρτηση που να ελγχει εν σε να πνακα ακεραων υπρχει στοιχεο (εκτς απ το τελευταο) που να εναι μεγαλτερο απ το θροισμα λων των επμενων στοιχεων του. Για παρδειγμα,
ο πνακας με τους ακραιους 21 20 10 8 4 5 δεν περιχει ττοιο στοιχεο,
εν ο πνακας με τους ακραιους 21 20 8 10 -1 4 5 περιχει το στοιχεο 10 που εναι μεγαλτερο απ 5+4+(-1)
Το πργραμμα να τυπνει μσα στη συνρτηση να μνυμα για το πρτο ( το τελευταο) ττοιο στοιχεο (πιο εναι και η θση του στον πνακα), μνυμα αποτυχας αν δεν υπρχει στοιχεο με τα χαρακτηριστικ που αναζητομε
Πρτο Πρβλημα (1)
Πολυτεχνεο Κρτης – Τμμα ΗΜΜΥ Εργαστριο Διανεμημνων Πληροφοριακν Συστημτων & Εφαρμογν
Σημεωση 1: Στην αναδρομικ συνρτηση απαγορεεται η χρση οποιουδποτε βρχου επανληψης (for, while…) και η δλωση καθολικν (global) στατικν (static) μεταβλητν
Σημεωση 2: Ξεκινντας απ να απ τα 2 κρα του πνακα, η αναδρομ εναι πιο εκολη
Σημεωση 3: Κατ την αποσφαλμτωση, δοκιμστε μικρος πνακες (αρχικ, 1-6 στοιχεων) και τυπστε την τιμ που επιστρφει σε κθε κλση η αναδρομικ συνρτηση
Τα περισστερα σφλματα γνονται ταν η συνρτησ σας σε κποια περπτωση δεν επιστρφει κποια τιμ (εν θα πρεπε).
Μετ την αποσφαλμτωση, αφαιρστε τη βοηθητικ εκτπωση της τιμς επιστροφς – κρατεστε μως το μνυμα που ζητει η εκφνηση
Πρτο Πρβλημα (2)
Σχεδιασμς
Για την επλυση του προβλματος παρχεται ο ακλουθος βοηθητικς κδικας:
Λση 1
if (pos > 0) {
if (numsVector[pos-1] > *sum) {
printf("\nElement: %d at pos: %d satisfies the condition",numsVector[pos-1], pos-1 );
} else {
}
}
*
*
Λση 2
if (pos >= 0) {
if (numsVector[pos] > sum) {
printf("\nElement: %d at pos: %d satisfies the condition",numsVector[pos], pos);
} else {
}
}
}
*
*
Λση 3
if (pos < 0) {
return;
if ((pos != N-1) && (numsVector[pos] > sum) )
printf("\nElement: %d at pos: %d satisfies the condition",numsVector[pos], pos);
else
}
*
*
Λση 1: Κλση συνρτησης
Λση 3: Κλση συνρτησης
*
*
Δετερο Πρβλημα (1)
Γρψτε μα αναδρομικ συνρτηση που να ελγχει εν σε μα λστα ακεραων εναι μεγαλτερο το γινμενο των στοιχεων της που εναι σε ρτιες θσεις της λστας το αντστοιχο γινμενο των στοιχεων της που εναι σε περιττς θσεις (θεωρεστε τι το πρτο στοιχεο εναι στη θση 0, η οποα εναι ρτια)
Αν ο αριθμς των στοιχεων της λστας εναι περιττς, συνυπολογστε το τελευταο στοιχεο της λστας στο γινμενο των ρτιων θσεων.
Θεωρεστε τι η λστα θα χει πντα τουλχιστον δο στοιχεα.
Για παρδειγμα, στη λστα με τους ακραιους 5 4 6 15 25 46 τα δο γινμενα εναι 5*6*25=750 και 4*15*46=2760
Το πργραμμα
να τυπνει να μνυμα ΜΕΣΑ ΣΤΗ ΣΥΝΑΡΤΗΣΗ με τις τιμς των 2 γινομνων,
να επιστρφει το μγιστο αυτ γινμενο
*
*
Δετερο Πρβλημα (2)
Σημεωση 1: Στην αναδρομικ συνρτηση απαγορεεται η χρση οποιουδποτε βρχου επανληψης (for, while…) και η δλωση καθολικν (global) στατικν (static) μεταβλητν
Σημεωση 2: Κατ την αποσφαλμτωση, δοκιμστε μικρς λστες (αρχικ, 2-4 στοιχεων) και τυπστε την τιμ που επιστρφει σε κθε κλση η αναδρομικ συνρτηση.
Τα περισστερα σφλματα γνονται ταν η συνρτησ σας σε κποια περπτωση δεν επιστρφει κποια τιμ (εν θα πρεπε).
*
*
Σχεδιασμς
Γινμενο ρτιο
Γινμενο περιττν
Για την επλυση του προβλματος παρχεται ο ακλουθος βοηθητικς κδικας:
Σχεδιασμς
Γινμενο ρτιο
Γινμενο περιττν
Δετερο Πρβλημα (6)
int maxOddOrEven(struct node *p, int odd, int even, int counter) {
if (p == NULL) {
printf("\nEvent product is: %d, Odd product is:%d\n", even, odd);
return (odd > even) ? odd : even;
}
}
*
*
Δετερο Πρβλημα (7)
if (p != NULL) {
even *= p->value;
} else {
printf("\nEven product is: %d, Odd product is:%d\n", even, odd);
return (odd > even) ? odd : even;
}
} else {
printf("\nEvent product is: %d, Odd product is:%d\n", even, odd);
return (odd > even) ? odd : even;
}
}
*
*
Δετερο Πρβλημα (7)
int max;
printf( "\nThe max product is: %d\n", max);
/* head: δεκτης στην “αρχ” της λστας */
int max;
Λση 2
Τρτο Πρβλημα (1)
Γρψτε μια αναδρομικ συνρτηση που να ελγχει εν σε να πνακα ακεραων υπρχει τριδα διαδοχικν στοιχεων τσι στε το γινμενο των 2 πρτων στοιχεων (της τριδας) να ισοται με το τρτο στοιχεο (της τριδας).Για παρδειγμα,
ο πνακας με τους ακραιους 2 5 8 10 80 3 περιχει την τριδα 8,10, 80, και 8*10=80.
Το πργραμμα:
να τυπνει μσα στη συνρτηση να μνυμα για την πρτη ττοια τριδα, μνυμα αποτυχας αν δεν υπρχει στοιχεο με τα χαρακτηριστικ που αναζητομε,
*
*
Τρτο Πρβλημα (2)
Σημεωση 1: Στην αναδρομικ συναρτση απαγορεεται η χρση οποιουδποτε βρχου επανληψης (for, while…) και η δλωση καθολικν (global) στατικν (static) μεταβλητν.
Σημεωση 2: Κατ την αποσφαλμτωση, δοκιμστε μικρος πνακες (αρχικ, 1-6 στοιχεων) και τυπστε την τιμ που επιστρφει σε κθε κλση η αναδρομικ συνρτηση.
Τα περισστερα σφλματα γνονται ταν η συνρτησ σας σε κποια περπτωση δεν επιστρφει κποια τιμ (εν θα πρεπε).
*
*
Σχεδιασμς
Για την επλυση του προβλματος παρχεται ο ακλουθος βοηθητικς κδικας:
Τρτο Πρβλημα (5)
if (i >= nums-2) {
if (arr[i] * arr[i+1] == arr[i+2]) {
printf("Nums are: %d * %d = %d\n", arr[i], arr[i+1], arr[i+2]);
return i;
}
*
*
Τρτο Πρβλημα (6)
Λση: Κλση συνρτησης
/* numsVector: πνακας ακεραων */