Python Recursion (Αναδρομική λειτουργία)

Σε αυτό το σεμινάριο, θα μάθετε να δημιουργείτε μια αναδρομική συνάρτηση (μια συνάρτηση που ονομάζεται).

Τι είναι η αναδρομή;

Η επανάληψη είναι η διαδικασία καθορισμού κάτι από μόνη της.

Ένα παράδειγμα φυσικού κόσμου θα ήταν να τοποθετηθούν δύο παράλληλοι καθρέπτες το ένα απέναντι στο άλλο. Οποιοδήποτε αντικείμενο μεταξύ τους θα ανακλάται αναδρομικά.

Αναδρομική λειτουργία Python

Στην Python, γνωρίζουμε ότι μια συνάρτηση μπορεί να καλέσει άλλες λειτουργίες. Είναι ακόμη δυνατό για τη λειτουργία να καλείται. Αυτοί οι τύποι κατασκευών ονομάζονται αναδρομικές συναρτήσεις.

Η παρακάτω εικόνα δείχνει τη λειτουργία μιας αναδρομικής συνάρτησης που ονομάζεται recurse.

Αναδρομική λειτουργία στο Python

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

Factorial ενός αριθμού είναι το προϊόν όλων των ακέραιων αριθμών από 1 έως αυτόν τον αριθμό. Για παράδειγμα, το παραγοντικό του 6 (δηλώνεται ως 6!) Είναι 1 * 2 * 3 * 4 * 5 * 6 = 720.

Παράδειγμα αναδρομικής συνάρτησης

 def factorial(x): """This is a recursive function to find the factorial of an integer""" if x == 1: return 1 else: return (x * factorial(x-1)) num = 3 print("The factorial of", num, "is", factorial(num))

Παραγωγή

 Το παραγοντικό του 3 είναι 6

Στο παραπάνω παράδειγμα, factorial()είναι μια αναδρομική συνάρτηση όπως αποκαλείται.

Όταν ονομάζουμε αυτήν τη συνάρτηση με θετικό ακέραιο, θα ανακληθεί αναδρομικά μειώνοντας τον αριθμό.

Κάθε συνάρτηση πολλαπλασιάζει τον αριθμό με το παραγοντικό του αριθμού κάτω από αυτόν μέχρι να είναι ίσος με έναν. Αυτή η αναδρομική κλήση μπορεί να εξηγηθεί στα ακόλουθα βήματα.

 factorial (3) # 1η κλήση με 3 3 * factorial (2) # 2η κλήση με 2 3 * 2 * factorial (1) # 3η κλήση με 1 3 * 2 * 1 # επιστροφή από την 3η κλήση ως αριθμό = 1 3 * 2 # επιστροφή από τη 2η κλήση 6 # επιστροφή από την 1η κλήση

Ας δούμε μια εικόνα που δείχνει μια βήμα προς βήμα διαδικασία για το τι συμβαίνει:

Εργασία μιας αναδρομικής συντελεστή συντελεστή

Η αναδρομή μας τελειώνει όταν ο αριθμός μειώνεται στο 1. Αυτό ονομάζεται βασική συνθήκη.

Κάθε αναδρομική συνάρτηση πρέπει να έχει μια βασική συνθήκη που σταματά την επανάληψη ή αλλιώς η συνάρτηση αποκαλείται απεριόριστα.

Ο διερμηνέας Python περιορίζει τα βάθη της αναδρομής για να αποφύγει άπειρες αναδρομές, με αποτέλεσμα υπερχείλιση στοίβας.

Από προεπιλογή, το μέγιστο βάθος της αναδρομής είναι 1000. Εάν το όριο ξεπεραστεί, οδηγεί σε RecursionError. Ας δούμε μια τέτοια κατάσταση.

 def recursor(): recursor() recursor()

Παραγωγή

 Traceback (τελευταία πρόσφατη κλήση): Αρχείο "", γραμμή 3, στο αρχείο "", γραμμή 2, σε αρχείο "", γραμμή 2, σε αρχείο "", γραμμή 2, σε (Η προηγούμενη γραμμή επαναλήφθηκε 996 φορές περισσότερες φορές RecursionError: υπέρβαση του μέγιστου βάθους αναδρομής

Πλεονεκτήματα της αναδρομής

  1. Οι αναδρομικές λειτουργίες κάνουν τον κώδικα να φαίνεται καθαρό και κομψό.
  2. Μια πολύπλοκη εργασία μπορεί να χωριστεί σε απλούστερα δευτερεύοντα προβλήματα χρησιμοποιώντας την αναδρομή.
  3. Η δημιουργία αλληλουχιών είναι ευκολότερη με την αναδρομή παρά με τη χρήση μιας ένθετης επανάληψης.

Μειονεκτήματα της αναδρομής

  1. Μερικές φορές η λογική πίσω από την αναδρομή είναι δύσκολο να ακολουθηθεί.
  2. Οι αναδρομικές κλήσεις είναι ακριβές (αναποτελεσματικές) καθώς καταλαμβάνουν πολλή μνήμη και χρόνο.
  3. Οι αναδρομικές συναρτήσεις είναι δύσκολο να εντοπιστούν.

ενδιαφέροντα άρθρα...