Κοινή χρήση τεχνολογίας

Αναδρομικός αλγόριθμος [Calculating Factorial]

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

αναδρομικός αλγόριθμοςείναι μια τεχνική προγραμματισμού που χρησιμοποιείται ευρέως στην επιστήμη των υπολογιστών και στα μαθηματικά που επιτρέπει συναρτήσειςαπευθείαςήέμμεσοςγηκαλεί τον εαυτό του για να λυθει το προβλημα.αναδρομικόςΒασική ιδέαΕίναι η αποσύνθεση πολύπλοκων προβλημάτων σε μικρότερα, παρόμοια υποπροβλήματα μέχρις ότου αυτά τα υποπροβλήματα είναι αρκετά απλά για να επιλυθούν άμεσα.

Οι αναδρομικοί αλγόριθμοι συνήθως περιέχουν δύο κύρια μέρη:

  • Βασική περίπτωση: Αυτή είναι η συνθήκη τερματισμού για επαναλαμβανόμενες κλήσεις, δηλαδή η απλούστερη περίπτωση προβλήματος που μπορεί να απαντηθεί απευθείας χωρίς περαιτέρω αναδρομικές κλήσεις.
  • Αναδρομική περίπτωση: Πρόκειται για τη διαδικασία διαχωρισμού ενός προβλήματος σε μικρότερα υποπροβλήματα και επίλυσης αυτών των υποπροβλημάτων μέσω αναδρομικών κλήσεων. Η αναδρομική περίπτωση πρέπει να διασφαλίζει ότι κάθε κλήση προχωρά προς τη βασική περίπτωση.

Βήματα αναδρομικού αλγορίθμου:

  • Προσδιορισμός βασικών περιπτώσεων: Προσδιορίστε ποια προβλήματα μπορούν να επιλυθούν απευθείας χωρίς περαιτέρω αναδρομικές κλήσεις.
  • Σχεδιασμός αναδρομικών καταστάσεων: Ορίστε πώς να χωρίσετε ένα μεγάλο πρόβλημα σε μικρότερα υποπροβλήματα και πώς να συνδυάσετε τις λύσεις στα υποπροβλήματα για να βρείτε μια λύση στο αρχικό πρόβλημα.
  • Εγγύηση αναδρομικής σύγκλισης: Βεβαιωθείτε ότι οι αναδρομικές κλήσεις θα φτάσουν τελικά στη βασική περίπτωση και αποφύγετε την άπειρη αναδρομή.

Πλεονεκτήματα και μειονεκτήματα των αναδρομικών αλγορίθμων:

πλεονέκτημα: Ο κώδικας είναι συνοπτικός, η λογική είναι ξεκάθαρη και είναι εύκολο να κατανοηθεί και να γραφτεί.
έλλειψη : Ενδέχεται να είναι λιγότερο αποδοτική από την επαναληπτική λύση επειδή περιλαμβάνει περισσότερα έξοδα κλήσης συναρτήσεων. Επιπλέον, η αναδρομή που είναι πολύ βαθιά μπορεί να προκαλέσει σφάλματα υπερχείλισης στοίβας.

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

Παράδειγμα: Υπολογισμός παραγοντικού

def factorial(n):#自定义求n的阶乘函数
        if n==1:#判断n=1
                return 1#返回1结束
        else:#递归条件 即n!=1
                return n*factorial(n-1)#递归求阶乘

number = int(input("请输入一个正整数:"))#输入n的值
result = factorial(number)#调用阶乘函数
print("%d 的阶乘是 %d" %(number,result))#输出结果
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

Εισαγάγετε την περιγραφή της εικόνας εδώ

Εξήγηση κώδικα

factorial Η συνάρτηση λαμβάνει μια παράμετρο n , αντιπροσωπεύει τον αριθμό για τον οποίο πρόκειται να υπολογιστεί το παραγοντικό.Το παραγοντικό εκφράζεται ωςn!, ορίζεται ως όλα μικρότερα ή ίσα με n Το γινόμενο θετικών ακεραίων. Για παράδειγμα,5! = 5 × 4 × 3 × 2 × 1 = 120

Μέσα στη συνάρτηση:

  • Βασική περίπτωση: αν n Αν ισούται με 1, η συνάρτηση επιστρέφει απευθείας 1. Αυτή είναι η συνθήκη τερματισμού της αναδρομής επειδή το παραγοντικό του 1 ορίζεται ως 1.
  • Αναδρομική περίπτωση: αν n δεν ισούται με 1, η συνάρτηση θαn καιfactorial(n-1) Τα αποτελέσματα πολλαπλασιάζονται.factorial(n-1) είναι αλήθειαfactorial λειτουργίαΗ ίδια η κλήση , αλλά η παράμετρος μειώνεται κατά 1.Αυτή η κλήση θα συνεχιστεί μέχριn φτάνει στο 1.

Το κλειδί για την αναδρομή είναι ότι κάθε αναδρομική κλήση κινείται πιο κοντά στη βασική περίπτωση, φτάνοντας τελικά στη βασική περίπτωση και αρχίζοντας να επιστρέφει τιμές. Σε αυτό το παράδειγμα, κάθε αναδρομική κλήση μειώνεται το n κατά 1 έως ότου το n γίνει 1.

Ειδοποίηση:

Η αναδρομή μπορεί να αντιμετωπίσει προβλήματα απόδοσης ή σφάλματα υπερχείλισης στοίβας κατά το χειρισμό μεγάλων τιμών, επειδή κάθε κλήση συνάρτησης καταλαμβάνει ένα μέρος του χώρου στοίβας. Για απλές μαθηματικές πράξεις όπως τα παραγοντικά, υπάρχουν συχνά πιο αποτελεσματικές και φιλικές στη μνήμη επαναληπτικές μέθοδοι. Ωστόσο, η αναδρομή παρέχει έναν κομψό και εύκολα κατανοητό τρόπο επίλυσης ορισμένων προβλημάτων.