Σημειωματάριο μαθήματος 1ης Νοε. 2017

Σχετικά έγγραφα
Σημειωματάαριο Δευτέρας 16 Οκτ. 2017

2.1 Διαιρετότητα, ισοϋπόλοιποι αριθμοί. q Z, a = b q + r.

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ Η/Υ (ΟΜΑΔΑ ΘΕΜΑΤΩΝ A)

Σημειωματάριο Δευτέρας 30 Οκτ. 2017

O n+2 = O n+1 + N n+1 = α n+1 N n+2 = O n+1. α n+2 = O n+2 + N n+2 = (O n+1 + N n+1 ) + (O n + N n ) = α n+1 + α n

Θεωρια Αριθµων Προβληµατα

Σημειωματάριο Τετάρτης 29 Νοε. 2017

Διακριτά Μαθηματικά. Απαρίθμηση: Διωνυμικοί συντελεστές

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

Ν!=1*2*3* *(N-1) * N => N! = (Ν-1)! * N έτσι 55! = 54! * 55

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

Σημειωματάριο Δευτέρας 9 Οκτ. 2017

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

Κεφάλαιο 8: Προγραμματίζοντας αλγορίθμους έξυπνα και δημιουργικά

* * * ( ) mod p = (a p 1. 2 ) mod p.

Υπολογιστικά & Διακριτά Μαθηματικά

Υπολογιστικά & Διακριτά Μαθηματικά

ΜΑΘΗΜΑΤΙΚΑ Α ΓΥΜΝΑΣΙΟΥ

τις αναδρομικές ακολουθίες (recursive sequences) στις οποίες ορίζαμε

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

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

1 ο ΦΥΛΛΑΔΙΟ ΑΣΚΗΣΕΩΝ - ΑΛΓΟΡΙΘΜΟΙ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 1 ΛΥΣΕΙΣ Ανάλυση Πολυπλοκότητας

ΜΑΘΗΜΑΤΙΚΑ Α ΓΥΜΝΑΣΙΟΥ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

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

Χαρακτήρες διαιρετότητας ΜΚΔ ΕΚΠ Ανάλυση αριθμού σε γινόμενο πρώτων παραγόντων

4.2 ΕΥΚΛΕΙΔΕΙΑ ΔΙΑΙΡΕΣΗ

1 Αριθμητική κινητής υποδιαστολής και σφάλματα στρογγύλευσης

Υπολογιστικά & Διακριτά Μαθηματικά

Κρυπτογραφία. Έλεγχος πρώτων αριθών-παραγοντοποίηση. Διαφάνειες: Άρης Παγουρτζής Πέτρος Ποτίκας

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 1 ΛΥΣΕΙΣ Ανάλυση Πολυπλοκότητας

Αριθμοθεωρητικοί Αλγόριθμοι

(Γραμμικές) Αναδρομικές Σχέσεις

Μαθηματικά. Ενότητα 2: Δεκαδικοί αριθμοί, κλάσματα, δυνάμεις, ρίζες και ποσοστά. Σαριαννίδης Νικόλαος Τμήμα Λογιστικής και Χρηματοοικονομικής

Μ Α Θ Η Μ Α Τ Ι Κ Α Α Γ Υ Μ Ν Α Σ Ι Ο Υ

(Γραμμικές) Αναδρομικές Σχέσεις

11. Ποιες είναι οι άμεσες συνέπειες της διαίρεσης;

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

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

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 1 η

Διακριτά Μαθηματικά. Απαρίθμηση: Διωνυμικοί συντελεστές

Ασκήσεις. Ασκήσεις και προβλήματα στα κεφάλαια

ΗΥ118: Διακριτά Μαθηματικά Εαρινό εξάμηνο 2019 Λύσεις ασκήσεων προόδου

Αναδροµή (Recursion) ύο παρεξηγήσεις. Σκέψου Αναδροµικά. Τρίγωνο Sierpinski Μη αναδροµικός ορισµός;

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ Εντολές επανάληψης Εντολές επανάληψης while for do-while ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ Παράδειγμα #1 Εντολή while

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

Εύρεση ν-στού πρώτου αριθμού

Τμήμα Τεχνολόγων Γεωπόνων - Φλώρινα

1 Σύντομη επανάληψη βασικών εννοιών

Δ/νση Β /θµιας Εκπ/σης Φλώρινας Κέντρο ΠΛΗ.ΝΕ.Τ. Πολυώνυµα ΠΟΛΥΩΝΥΜΑ ΑΚΕΡΑΙΑ ΠΟΛΥΩΝΥΜΑ ΜΙΑΣ ΜΕΤΑΒΛΗΤΗΣ

Οι φυσικοί αριθμοί. Παράδειγμα

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 1 η

Διάλεξη 15: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

(Γραμμικές) Αναδρομικές Σχέσεις

Αναδρομικές ακολουθίες και Θεωρία Αριθμών

Σημειωματάριο Τετάρτης 18 Οκτ. 2017

Μαθηματική Εισαγωγή Συναρτήσεις

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

1.2 Εξισώσεις 1 ου Βαθμού

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

Αλγόριθμοι και Πολυπλοκότητα

ΠΑΡΑΓΡΑΦΟΣ 1. 2 ΠΡΟΣΘΕΣΗ ΑΦΑΙΡΕΣΗ ΚΑΙ ΠΟΛΛΑΠΛΑΣΙΑΣΜΟΣ ΦΥΣΙΚΩΝ ΑΡΙΘΜΩΝ

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

Μαθηματική Εισαγωγή Συναρτήσεις

ΕΡΩΤΗΣΕΙΣ ΘΕΩΡΙΑΣ Α ΓΥΜΝΑΣΙΟΥΣΤΗΝ ΑΛΓΕΒΡΑ. Άρτιοι αριθμοί ονομάζονται οι αριθμοί που διαιρούνται με το 2 και περιττοί εκείνοι

Περιληπτικά, τα βήματα που ακολουθούμε γενικά είναι τα εξής:

ΟΡΙΣΜΕΝΟ ΟΛΟΚΛΗΡΩΜΑ

Αριθμητικές Μέθοδοι σε Προγραμματιστικό Περιβάλλον (Εργαστήριο 5)

7.Αριθμητική παράσταση καλείται σειρά αριθμών που συνδέονται με πράξεις μεταξύ τους. Το αποτέλεσμα της αριθμητικής παράστασης ονομάζεται τιμή της.

Αριθµοθεωρητικοί Αλγόριθµοι και το. To Κρυπτοσύστηµα RSA

( ) Ίσες συναρτήσεις. = g, Οι συναρτήσεις f, g λέμε ότι είναι ίσες και συμβολίζουμε f. όταν: Έχουν το ίδιο πεδία ορισμού Α

bca = e. H 1j = G 2 H 5j = {f G j : f(0) = 1}

Συνδυαστική Απαρίθμηση

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 1 η

Σχεδίαση Αλγορίθμων -Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο

Μη γράφετε στο πίσω μέρος της σελίδας

Εντολές ελέγχου ροής if, for, while, do-while

Οι Φυσικοί Αριθμοί. Παρατήρηση: Δεν στρογγυλοποιούνται αριθμοί τηλεφώνων, Α.Φ.Μ., κωδικοί αριθμοί κλπ. Πρόσθεση Φυσικών αριθμών

2. Να γράψετε έναν αριθμό που είναι μεγαλύτερος από το 3,456 και μικρότερος από το 3,457.

ΜΑΘΗΜΑΤΙΚΑ Α ΓΥΜΝΑΣΙΟΥ ΑΝΔΡΕΣΑΚΗΣ ΔΗΜΗΤΡΗΣ ΦΥΛΛΑ ΕΡΓΑΣΙΑΣ ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ ΕΝΟΤΗΤΑ Α.1.2. ΠΡΑΞΕΙΣ ΦΥΣΙΚΩΝ ΑΡΙΘΜΩΝ ΚΑΙ ΙΔΙΟΤΗΤΕΣ ΟΝΟΜΑΤΕΠΩΝΥΜΟ

Αλγόριθμοι για αυτόματα

ΘΕΩΡΙΑ ΑΡΙΘΜΩΝ Λυσεις Ασκησεων - Φυλλαδιο 1

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Εντολές for, while, do-while Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 1 η

KΕΦΑΛΑΙΟ 1 ΧΡΗΣΙΜΕΣ ΜΑΘΗΜΑΤΙΚΕΣ ΕΝΝΟΙΕΣ. { 1,2,3,..., n,...

Διάλεξη 20: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων. Κρυπτογραφία. Θεωρία αριθμών Αλγεβρικές δομές. Χρήστος Ξενάκης

επιστρέφει το αμέσως μεγαλύτερο από το x στοιχείο του S επιστρέφει το αμέσως μικρότερο από το x στοιχείο του S

Δυναμικός προγραμματισμός για δέντρα

ΛΥΣΕΙΣ ΤΩΝ ΑΣΚΗΣΕΩΝ ΕΠΑΝΑΛΗΨΗΣ ΓΙΑ ΤΙΣ ΓΙΟΡΤΕΣ (ΑΡΙΘΜΗΤΙΚΗ)

Σχεδίαση & Ανάλυση Αλγορίθμων

Ορισμένες σελίδες του βιβλίου

ΛΧ1004 Μαθηματικά για Οικονομολόγους

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΜΟΣ Εντολές επιλογής και αποφάσεων 1 ο Φύλλο Εργασιών Εισαγωγικές ασκήσεις για την εντολή if ΑΠΑΝΤΗΣΕΙΣ

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

Αφαίρεση στον FP. Πολυμορφισμός Συναρτήσεις υψηλότερης τάξης Οκνηρός και Άπληστος Υπολογισμός

Κατ οίκον Εργασία 1 Σκελετοί Λύσεων

Transcript:

Σημειωματάριο μαθήματος 1ης Νοε. 2017 Παραδείγματα συναρτήσεων. Αναδρομικές συναρτήσεις. Ξεκινήσαμε πακετάροντας παλαιότερό μας κώδικα για τον υπολογισμό των διαιρετών ενός φυσικού αριθμού σε συνάρτηση. Η συνάρτηση divisors παρακάτω επιστρέφει μια λίστα με όλους τους διαιρέτες του αριθμού n, του 1 και του n συμπεριλαμβανομένων. Δουλεύει πολύ απλά, διανύοντας όλους τους φυσικούς αριθμούς από το 2 έως το n-1 και ελέγχοντας αν διαιρούν το n. (Προσθέτει επίσης στη λίστα το 1 και το n που είναι κι αυτοί διαιρέτες του n.) In [ ]: def divisors(n): Γράψαμε και την πιο γρήγορη έκδοση της συνάρτησης αυτής, που ελέγχει πιο έξυπνα μόνο όσους υποψήφιους διαιρέτες είναι συνάρτηση divisorsfast. n. Ονομάσαμε αυτή τη In [ ]: def divisorsfast(n): if k*k > n: break if k!= n//k: L.append(n//k)

Η συνάρτηση commondivisors(m, n) χρησιμοποιεί τη συνάρτηση divisorsfast ή τη συνάρτηση divisors για να βρει τους κοινούς διαιρέτες των m και n. Τέλος η συνάρτηση gcd(m, n) χρησιμοποιεί τη συνάρτηση commondivisors για να βρει το μέγιστο κοινό διαιρέτη των m και n. In [1]: def divisors(n): def divisorsfast(n): if k*k > n: break if k!= n//k: L.append(n//k) def commondivisors(m, n): Lm = divisorsfast(m) Ln = divisorsfast(n) L = [] for d in Lm: if d in Ln: L.append(d) def gcd(m, n): return max(commondivisors(m, n)) print(gcd(100, 60)) 20

Η επόμενη συνάρτηση που γράψαμε είναι η συνάρτηση factorial(n) για τον υπολογισμού του παραγοντικού του n. Θυμίζουμε ότι 0! = 1 με τη σύμβαση ότι. n! = 1 2 3 4 (n 1) n In [2]: def factorial(n): product = 1 for i in range(1, n+1): product *= i return product print(factorial(5)) 120 Γράψαμε έπειτα ξανά την ίδια συνάρτηση, με όνομα τώρα factorialr με τρόπο ώστε να εκμεταλλευτούμε την απλή ιδιότητα n! = n(n 1)! για n > 0. Η συνάρτηση factorialr είναι ουσιαστικά μια μετάφραση του παραπάνω τύπου σε πρόγραμμα. Έτσι όταν ξεκινάει η συνάρτηση ελέγχει πρώτα απ' όλα αν είμαστε στην απλή περίπτωση n = 0 οπότε επιστρέφει 1. Αν όχι τότε η συνάρτηση καλεί τον εαυτό της για να υπολογίσει το (n 1)!, και αφού επιστρέψει αυτή η κλήση πολλαπλασιάζει με n και επιστρέφει το αποτέλεσμα. Όταν μια συνάρτηση καλεί τον εαυτό της λέμε ότι έχουμε μια αναδρομική (recursive) συνάρτηση. Παρατηρείστε πόσο απλά είναι γραμμένη τώρα η συνάρτηση. Δώστε επίσης ιδιαίτερη σημασία στην περίπτωση, που είναι ακριβώς η περίπτωση όπου η συνάρτηση δεν καλεί τον εαυτό της, εκεί δηλ. όπου, όπως λέμε, σταματάει η αναδρομή. Αν κάποια στιγμή δεν σταματήσουν οι αναδρομικές κλήσεις τότε η συνάρτηση θα καλεί συνεχώς τον εαυτό της και δε θα τελειώσει ποτέ. n = 0 In [3]: def factorialr(n): if n==0: return 1 return n*factorialr(n-1) print(factorialr(5)) 120

Χρησιμοποιούμε τη συνάρτηση factorial (ή την factorialr) για να υπολογίσουμε τους διωνυμικούς συντελεστές Ο ποσότητα αυτή ορίζεται να είναι το πόσα υποσύνολα μεγέθους έχει το σύνολο και αποδεικνύεται ότι ισχύει Με αυτόν ακριβώς τον τύπο υλοποιούμε τη συνάρτηση binomial(n, k). C(n, k) για 0 k n. k {1, 2,, n} n! C(n, k) =. k!(n k)! In [4]: def factorial(n): product = 1 for i in range(1, n+1): product *= i return product def binomial(n, k): if not (0 <= k <= n): return 0 return factorial(n)//(factorial(k)*factorial(n-k)) print(binomial(10, 4)) 210 Το λεγόμενο τρίγωνο του Pascal δεν είναι τίποτε άλλο από την ταυτότητα C(n, k) = C(n 1, k 1) + C(n 1, k) μέσω της οποίας γράφουμε τώρα μια αναδρομική μορφή της συνάρτησης binomial, που την ονομάζουμε binomialr, και η οποία δε χρησιμοποιεί τη συνάρτηση factorial. Η συνθήκη με την οποία κόβουμε την αναδρομή είναι η περίπτωση που το k είναι 0 ή n οπότε ξέρουμε ότι η απάντηση είναι 1.

In [5]: def binomialr(n, k): if k in [0, n]: return 1 return binomialr(n-1, k-1) + binomialr(n-1, k) print(binomialr(5, 3)) 10 F n n 0 Η ακολουθία Fibonacci είναι η ακολουθία, για, που ορίζεται ως εξής: F0 = F1 = 1 και F n = F n 1 + F n 2 για n 2. Σε αυτή την ακολουθία η αναδρομή είναι ουσιαστικά ενσωματωμένη στον ορισμό της και η υλοποίησή της είναι σχεδόν μια μεταγραφή από την κοινή γλώσσα σε python. In [6]: def fib(n): if n<=1: return 1 return fib(n-1)+fib(n-2) print(fib(5)) 8

Το δυαδικό ανάπτυγμα ενός φυσικού αριθμού Αν b είναι ένας φυσικός αριθμός τότε συμβολίζουμε με ( x n x n 1 x2x1x0) b x0, x1,, x n {0, 1, 2,, b 1} x = + b + + + + ( x n x n 1 x2x1x0) b b x x j b x b = 10 x x j τον αριθμό (εδώ ισχύει ) x0 x1 x2b 2 x3b 3 x n 1b n 1 x n b n. Η έκφραση ονομάζεται το -αδικό ανάπτυγμα του και τα ονομάζονται -αδικά ψηφία του. Η συνηθισμένη περίπτωση είναι η οπότε μιλάμε για το 10-αδικό ανάπτυγμα του, και τα είναι τα συνηθισμένα του δεκαδικά ψηφία, που είναι όλα από 0 έως 9. Δεν υπάρχει όμως κάτι πραγματικό ιδιαίτερο με την περίπτωση b = 10 και κάθε αριθμός έχει ένα (μοναδικό) ανάπτυγμα σε κάθε βάση b. Μια ιδιαίτερα σημαντική περίπτωση είναι η περίπτωση. Στο δυαδικό ανάπτυγμα του x b = 2 x = x0 + x12 + x24 + x32 3 + x n 12 n 1 + x n 2 n. όλα τα ψηφία x j είναι είτε 0 είτε 1. Στην παρακάτω συνάρτηση `binary(n)` υπολογίζουμε τα δυαδικά ψηφία του `n` σε ένα string. Το τελευταίο γράμμα του string είναι το ψηφίο των μονάδων (το x0). Από την παραπάνω εξίσωση για το x προκύπτει ότι ο αριθμός x x0 είναι άρτιος και επίσης ότι Η τελευταία ισότητα μας λέει ότι το δυαδικό ανάπτυγμα του είναι το. Σε αυτή την παρατήρηση στηρίζουμε την αναδρομική κλήση. Η άλλη βασική παρατήρηση είναι ότι το x0 είναι 0 αν το x είναι άρτιο και 1 αν το x είναι περιττό. x x0 2 = x1 + x22 + x32 2 + + x n 12 n 2 + x n 2 n 1 x x0 2 ( x n x n 1 x2x1) 2. In [7]: def binary(n): if n==0: return "0" if n==1: return "1" if n%2 == 0: return binary(n//2)+"0" else: return binary((n-1)//2)+"1" print(binary(1352)) 10101001000

Ο αλγόριθμος του Ευκλείδη για το ΜΚΔ Ο προηγούμενος αλγόριθμος για το μέγιστο κοινό διαιρέτη (ΜΚΔ) δύο αριθμών που υλοποιήσαμε σήμερα είναι πολύ απλός αλλά μπορεί επίσης να είναι και πολύ αργός. Ο λόγος είναι ότι στηρίζεται στην εύρεση όλων των διαιρετών των δύο αριθμών, και αυτή η διαδικασία είναι πάρα πολύ αργή όταν οι αριθμοί είναι μεγάλοι. Ο αλγόριθμος του Ευκλείδη όμως, που είναι αυτός που πάντα χρησιμοποιούμε για την εύρεση του ΜΚΔ, είναι πολύ πιο γρήγορος και δε χρειάζεται να βρει τους διαιρέτες των δύο αριθμών. Η βασική παρατήρηση που κάνει τον αλγόριθμο να δουλεύει είναι η εξής. a b > 0 r {0, 1, 2,..., b 1} a/b a, b Αν είναι δύο φυσικοί αριθμοί και είναι το υπόλοιπο της διαίρεσης τότε ο ΜΚΔ των είναι ίσος με τον ΜΚΔ των b, r. Ο μεγαλύτερος δηλ. από τους δύο αριθμούς, ο a, αντικαταστάθηκε από έναν άλλο, τον r, ο οποίος είναι μικρότερος από τον μικρότερο από τους αρχικούς δύο αριθμούς, δηλ. τον b. Εφαρμόζοντας συνεχώς αυτή την αναγωγή φτάνουμε σε κάποια στιγμή σε ένα ζεύγος αριθμών όπου το υπόλοιπο είναι 0, όπου δηλ. ο μικρότερος από τους δύο αριθμούς διαιρεί το μεγαλύτερο. Σε αυτή την περίπτωση είναι προφανές ότι ο ΜΚΔ είναι ο μικρότερος από τους δύο αριθμούς. Η συνάρτηση gcdeuclid(a, b) που βλέπετε παρακάτω υλοποιεί ακριβώς αυτό τον αλγόριθμο. Ελέγχουμε πρώτα αν ο χρήστης πέρασε στον αριθμό b κάποιον που είναι μικρότερος από τον a. Αν αυτό έγινε τότε ανταλλάσουμε τις τιμές των δύο ορισμάτων ώστε από δω και πέρα να είμαστε σίγουροι ότι ο a είναι ο μεγαλύτερος. Έπειτα ελέγχουμε αν ο b διαιρεί τον a. Αν αυτό συμβαίνει τότε ο ΜΚΔ είναι φυσικά ο b, και άρα επιστρέφουμε αυτό. Αν το υπόλοιπο r δεν είναι 0 τότε επιστρέφουμε το ΜΚΔ των b και r. Πώς τον βρίσκουμε αυτόν; Απλά η συνάρτηση gcdeuclid καλεί τον εαυτό της (με άλλα ορίσματα φυσικά από αυτά που της είχαμε περάσει). Είναι δηλ. αναδρομική (recursive) συνάρτηση. In [8]: def gcdeuclid(a, b): if a<b: a, b = b, a r = a%b if r == 0: return b return gcdeuclid(b, r) print(gcdeuclid(1002342, 15132423)) 3