רֵקוּרְסִיָּה (recursion) היא תופעה שבה מופע אחד מכיל בתוכו מופע נוסף מאותו סוג, כך שהדבר חוזר על עצמו.
רקורסיית עצירה (רקורסיית קצה) כוללת "סף עצירה" שבו מפסיקים את החזרה. רקורסיה אינסופית חוזרת בכל רמה בלי עצירה. רקורסיה הדדית מתרחשת כששתי תופעות מכילות אחת את השנייה, למשל מראה מול מראה.
הגדרה היא רקורסיבית אם משתמשים בה בעצמה כדי להגדיר את עצמָה.
רקורסיה חזותית היא תמונה שמכילה העתק שלה בתוכה. זה נקרא אפקט דרוסטה. דוגמה ידועה: צייר שמצייר את התמונה שבה הוא מצייר.
רקורסיה לשונית היא כאשר משפט מוטמע בתוך עצמו ויכול להמשיך שוב ושוב. דוגמאות: משפטים שחוזרים על עצמם, או ראשי תיבות רקורסיביים כמו GNU ("GNU's Not Unix").
חוויה שבה חולם בתוך חלום, או מדמיין שהוא מדמיין.
במתמטיקה ובתכנות, פונקציה רקורסיבית קוראת לעצמה כחלק מהחישוב. בפיתוח זה נפוץ להשתמש ב"תנאי עצירה" כדי להפסיק את הקריאות. דוגמא מוחשית: חישוב עצרת (factorial) נעשה על ידי קריאה לעצמה עם מספר קטן יותר עד שמגיעים ל-0.
אלגוריתם רקורסיבי פותח בעיה על-ידי פתרון מקרים קטנים יותר מאותה הבעיה. בדרך כלל יש בו תנאי עצירה. בזמן ריצה, כל קריאה שומרת משתנים וכתובת החזרה במחסנית (stack), ולכן דרישת הזיכרון גדלה עם עומק הרקורסיה. במקרים רבים אפשר להמיר רקורסיה לאלגוריתם איטרטיבי שיחסוך זיכרון, אך לא תמיד.
שפות תכנות תומכות ברקורסיה, וחלקן מבצעות אופטימיזציה לרקורסיית זנב (tail recursion), כדי לצמצם עלות ריצה. יש שפות שמיישמות חיפוש או חוקים על ידי קריאות חוזרות, למשל LISP ו-Prolog.
האלגוריתם לעצרת בודק אם n שווה ל-0 (תנאי עצירה). אם כן מחזירים 1. אחרת קוראים לעצמם עם n-1 ומכפילים בתוצאה ב-n. כך מחשבים למשל 4 על ידי חישוב 3,2,1 ו-0 ואז כפל חוזר לקבלת 24.
אלגוריתם QuickSort הוא דוגמה רקורסיבית נפוצה. הוא מקבל איבר פיבוט, מחלק את הרשימה לתת-קבוצות של "קטנים" ו"גדולים" ואז ממיין כל תת-קבוצה באופן רקורסיבי.
רקורסיה שימושית בחיפוש במבני עצים, למשל חיפוש קבצים בתוך תיקיות ותתי-תיקיות. האלגוריתם מחפש בכל תיקייה ואז קורא לעצמו בכל תת-תיקייה עד שאין עוד תתי-תיקיות.
סדרת פיבונאצ'י מוגדרת כך שכל איבר הוא סכום שני האיברים הקודמים. זו הגדרה רקורסיבית טיפוסית.
תרגיל קלאסי שממחיש רקורסיה. הפתרון הרקורסיבי שם ברור ואינטואיטיבי יותר מהפתרון האיטרטיבי.
רקורסיה היא מצב שבו דבר אחד מכיל בתוכו עותק קטן של עצמו.
אם יש נקודת עצירה, מפסיקים לחזור. אם לא, זה ממשיך לנצח. מראה מול מראה היא דוגמה פשוטה.
הגדרה רקורסיבית היא הגדרה שמשתמשת בעצמה כדי להסביר את עצמה.
תמונה שבתוכה יש את אותה התמונה שוב. קוראים לזה אפקט דרוסטה. צייר שצייר את התמונה שבה הוא מצייר זה דוגמה.
משפטים שמתחילים וחוזרים על עצמם. יש גם ראשי תיבות שמזכירים את עצמם, כמו GNU.
חולם שחולם שהוא חולם. זה דוגמה לחשיבה בתוך חשיבה.
פונקציה היא סדרת הוראות. פונקציה רקורסיבית קוראת לעצמה שוב ושוב. לדוגמה, לחשב עצרת: מחשבים את המספר הקטן יותר עד שמגיעים ל-0 ואז מכפילים חזרה כדי לקבל את התוצאה.
אלגוריתם כזה פותר בעיה על ידי פירוקה לבעיות קטנות יותר. יש בו תמיד תנאי עצירה. דוגמה מפורסמת היא QuickSort שמחלק רשימה וחוזר על עצמו על החלקים.
בחיפוש בתיקיות, המחשב נכנס לתיקייה, ואז לתיקיות שבתוכה, ועוד, עד שלא נשארים תיקים. זה נעשה בעזרת רקורסיה.
בסדרה זו כל מספר הוא סכום שני המספרים שלפניו. זו דוגמה להגדרה רקורסיבית פשוטה.
משחק מתמטי שבו הפתרון הרקורסיבי ברור וקל להבין.
תגובות גולשים