הפקטוריאלי של מספר הוא מושג מתמטי חשוב. אתה יכול להשתמש בו כדי לבצע תמורות וצירופים, לכתוב ביטויים אקספוננציאליים ולוגריתמיים ולחשב הסתברות.
אתה משתמש בו כדי למצוא את מספר הדרכים השונות בהן תוכל לעצב סידור ישיבה, או לבחור חולצות לחופשה שלך במלדיביים. אבל איך אתה יכול לחשב את הפקטוריאלי של מספר?
מהו הפקטוריאל של מספר?
הפקטוריאלי של מספר חיובי הוא המכפלה של כל המספרים השלמים החיוביים הנמוכים או שווים לערך המספר עצמו. מספר ואחריו סימן קריאה(!) מציין את הפקטוריאלי של מספר. אתה מייצג את הפקטוריאלי של חמישה כ-5! וחשב אותו כך:
5! = 5 * 4 * 3 * 2 * 1 = 120
דרך נוספת לדמיין את זה היא:
5! = 5 * 4! איפה 4! = 4 * 3!, 3! = 3 * 2! וכן הלאה עד שתקבל 1! = 1 * 0! שזה 1.
אתה תשתמש במושג זה כדי לבנות את התוכנית הפקטוריאלית שלנו באמצעות מושג פופולרי שנקרא רקורסיה.
מהי רקורסיה?
רקורסיה היא תהליך שבו פונקציה קוראת לעצמה. אחד היתרונות העיקריים של תהליך זה הוא שהוא מפרק בעיה גדולה יותר לגושים קטנים יותר. זה מקל על פתרון הבעיה.
אתה יכול להשתמש ברקורסיה כדי לפתור בעיות מתאימות בשלושה שלבים פשוטים:
- מצא את מקרה הבסיס: אם פונקציה תמיד קוראת לעצמה, התהליך יהיה אינסופי. כדי למנוע את זה, הגדירו מקרה בסיסי שהופך לנקודת העצירה הלוגית של הפונקציה שלכם. לדוגמה, בתוכנית פקטוריאלית, עצור את החישוב באפס. זה הופך להיות המקרה הבסיסי לבעיה.
- מצא את הקשר בין הבעיה לבעיות המשנה: חלק את הבעיה הגדולה יותר לתת-בעיית. לדוגמה, הבעיה היא למצוא את הפקטוריאלי של חמישה. נניח שיש לך את התשובה של פקטוריאלית של ארבע, כלומר 24. איך תקבל את הפקטוריאלי של חמש באמצעות 24? על ידי הכפלת חמש לתוכו. זהו היחס בין הבעיה לבעיית המשנה.
- הכליל את הקשר שנמצא בשלב 2: עכשיו שיש לך את היחס, הכליל אותו במונחים של n. אז, הפקטוראלי של מספר n הוא המכפלה של n והפקטוריאלי של n-1.
אתה יכול להשתמש במושג הזה כדי מצא את הסכום של n מספרים טבעיים, חשב את GCD, LCM, סדרת פיבונאצ'י, ובדקו מספרים ראשוניים.
פסאודו קוד עבור הפונקציה הפקטוריאלית באמצעות רקורסיה
זה איך אתה משתמש ברקורסיה וכתוב את קוד הפסאודו כדי לבנות את התוכנית שלך בכל שפה. עם שפות שונות, התחביר והביצוע משתנים אך ההיגיון נשאר ללא פגע.
פוּנקצִיָהעוּבדָה(נ)
אם n == 0 לאחר מכן // מקרה יסוד
לַחֲזוֹר1
לַחֲזוֹר n * עובדת שיחה (n - 1) // יחס כללי
תוכנית פקטורי ב-C
C הייתה שפת התכנות הראשונה ברמה גבוהה, בלתי תלויה בפלטפורמה. יש לו תחביר קפדני, הוא תלוי רישיות ומפעיל קוד במהירות המהירה ביותר. זוהי שפת תכנות פרוצדורלית ומכאן שאתה מצהיר על כל פונקציה על גבי רָאשִׁי פוּנקצִיָה. כך תוכל לבנות את התוכנית הפקטוריאלית באמצעות רקורסיה בשפת C:
אתה יכול למצוא את כל קוד המקור של התוכנית הפקטוריאלית באמצעות רקורסיה ב-C, Java ו-Python בזה מאגר GitHub.
- ייבא את קובץ כותרת הפלט הסטנדרטי של הקלט להצגת הפלט למסך.
#לִכלוֹל <stdio.h>
- הגדר פונקציה עוּבדָה ולקחת מספר שלם נ בתור טיעון.
intעוּבדָה(int נ){
- כתוב את המקרה הבסיסי של הפונקציה באמצעות ה- אם הצהרה ולבדוק את שוויונו באמצעות ==. אם n שווה לאפס, החזר אחד.
אם (n == 0)
לַחֲזוֹר1; - כתוב את המשוואה המוכללת והחזר את המכפלה של נ עם קריאת פונקציה של תת-בעיה n-1.
לַחֲזוֹר n * עובדה (n - 1);
} - הכריז על הפונקציה הראשית ואתחל משתנה מסוג מספר שלם כדי לאחסן את המספר שאת הפקטוראלי שלו אתה רוצה למצוא.
intרָאשִׁי(){
int מספר = 5; - הצג את הפקטוריאלי של המספר באמצעות printf() פוּנקצִיָה. %d הוא מפרט הפורמט העשרוני. השתמש בכל אחד ממפרטי הפורמט כדי להחליף אותו במספר שאת הפקטוריאלית שלו אתה רוצה למצוא ולקבל את התוצאה על ידי קריאה לפונקציה.
printf("פקטור של %d הוא %d", num, עובדה (num));
לַחֲזוֹר0;
}
תוכנית פקטורי בג'אווה
Java היא שפת תכנות מהודרת והיא בלתי תלויה בפלטפורמה. אתה מאחסן את כל הקוד בתוך a מעמד והביצוע מתחיל מה רָאשִׁי פוּנקצִיָה. זה תלוי רישיות ותחביר קפדני. הקוד קצת יותר ארוך אבל מהיר יותר בהשוואה לפייתון. כך תוכל לבנות את התוכנית הפקטוריאלית באמצעות רקורסיה ב-Java:
- הגדר את המחלקה הראשית.
מעמדרָאשִׁי{
- הגדר פונקציה סטטית עם סוג החזרה int שמקבלת משתנה n מסוג מספר שלם. הכרזת על שיטה סטטית שכן השיטה הראשית ב-Java מוכרזת גם היא כסטטית. בנוסף, אינך יכול לקרוא למתודה לא סטטית ממופע סטטי.
סטָטִיintעוּבדָה(int נ){
- כתוב את המקרה הבסיסי של הפונקציה באמצעות ה- אם הצהרה ולבדוק את שוויונו באמצעות ==. אם n שווה לאפס, החזר אחד.
אם (n == 0)
לַחֲזוֹר1; - כתוב את המשוואה המוכללת והחזר את המכפלה של נ עם קריאת פונקציה של תת-בעיה n-1.
לַחֲזוֹר n * עובדה (n - 1);
} - הכריז על הפונקציה הראשית ב-Java. הכריז על משנה הגישה בתור פּוּמְבֵּי, כך שהוא יכול להיות נגיש על ידי כל המחלקות והשיטות האחרות. אתה מצהיר על הפונקציה הראשית בתור סטָטִי כך שהמהדר יוכל להפעיל אותו מבלי ליצור מופע של המחלקה. סוג ההחזרה הוא בָּטֵל, והוא מקבל טיעונים מסוג חוּט. אחסן את המספר שאת הפקטורית שלו אתה רוצה למצוא.
פּוּמְבֵּיסטָטִיבָּטֵלרָאשִׁי(מחרוזת[] args){
int מספר = 5; - להשתמש ב println() שיטה, מופע של PrintStream מחלקה, המוגדרת ב- מערכת class כדי להציג את הפקטוריאלי של המספר.
System.out.println("פקטוריאלי של " + מספר + " הוא " + עובדה (מספר));
}
}
תוכנית פקטורי ב- Python
כתיבת קוד בפייתון היא סופר קלה ומהנה. מכיוון שזו שפה בלתי תלויה בפלטפורמה, אינך צריך להצהיר על סוג הנתונים של המשתנים. אתה גם נמנע מהצורך להכריז על מחלקות ולייבא ספריות עבור תוכנית כל כך פשוטה. מגרש המשחקים מוכן בשבילך להתחיל בקידוד.
התחביר קל יותר, עם אורך קוד קטן אבל לוקח קצת יותר זמן לביצוע מאשר שאר השפות. כך תוכל לבנות את התוכנית הפקטוריאלית באמצעות רקורסיה ב- Python:
- הגדר עובדת פונקציה שמקבלת כארגומנט n.
defעוּבדָה(נ):
- כתוב את המקרה הבסיסי של הפונקציה באמצעות ה- אם הצהרה ולבדוק את שוויונו באמצעות ==. אם n שווה לאפס, החזר אחד.
אם n == 0:
לַחֲזוֹר1 - כתוב את המשוואה המוכללת והחזר את המכפלה של נ עם קריאת פונקציה של תת-בעיה n-1.
לַחֲזוֹר n * עובדה (נ-1)
- אחסן את המספר שאת הפקטורית שלו אתה רוצה למצוא והצג אותו באמצעות הצהרת ההדפסה.
מספר = 5;
הדפס("פקטוריאלי של", מספר, "הוא", עובדה (מספר))
ישנם יישומים רבים של רקורסיה
רקורסיה היא דרך יעילה לפתרון בעיות. זהו עיקר הבינה המלאכותית ויש לו שימושים בעולם האמיתי במשחקי פאזל כמו שחמט או סודוקו.
זוהי גם שיטה רבת עוצמה למיון מבני נתונים כגון עץ או אלגוריתמי מיון כגון מיון מהיר ומיון מיזוג. תוכל גם להשתמש ברקורסיה באלגוריתמים כמו חיפוש בינארי, ביטויים מתמטיים כגון סדרת פיבונאצ'י ועוד.