כדי לפתור משחקי סכום אפס, אנו בונים עץ מהלכים.
ואנו בונים אותו ועוברים עליו באופן רקורסיבי,
בכלל על עצים יש המון דברים שעושים בסדר DFS ונוח מאוד לעשות
ברקורסיה. לא רק שנוח מאוד לעשות ברקורסיה אלא שפתרונות לא
רקורסיבים נוטים להיות ארוכים ומכוערים ו/או בסופו של דבר
מה שיש זה מימוש משלך של דמויי מחסנית, ורקורסיה משלך.כמובן שכל מה שניתן לממש בעזרת רקורסיה, ניתן לממש בעזרת מערך
ולולאות. אבל זה כמעט תמיד מיותר לחלוטין.
במקרים מסויימים כשהיעילות מאוד קריטית, ולפונקציה הרקורסיבית
שכתבנו יש הרבה פרמטרים והרבה משתנים לוקאליים, אז לפעמים עדיף לממש
את המחסנית בעצמך(אבל יש פתרונות אחרים גם בתוך מנגנון הרקורסיה
שיקטינו את כמות המידע על המחסנית)
יש אנשים שכותבים רקורסיה לא יעילה, משום שזה יותר יפה ויותר ברור
ויותר קל לקרוא ויותר קל לכתוב. וזה בסדר גמור, ולרוב שיקולים
אלה הרבה יותר חשובים מזמן ריצה.
יש הרבה מקומות(כמעט כל מה שאני כותב, בין השאר) שבהם משתמשים ברקורסיה
באופן יעיל, וניסיון לממש ללא רקורסיה, יהיה קשה מאוד, יכיל באגים,
ובסופו של עניין, לא יהיה יעיל יותר.
ושוב: מימוש קריא הוא כמעט תמיד עדיף על מימוש יעיל. וודאי וודאי כשהפרש
המהירות זניח. זאת טעות מאוד נפוצה, שאנשים מנסים לייעל קוד,
הם בסופו של דבר קיצרו את זמן הריצה של התוכנה ב100 פעימות,
והפכו אותה לבלתי קריאה בעליל.
דוגמא קלאסית לשימוש לא יעיל ומיותר ברקורסיה, הוא חישוב פיבונאצ'י
חישוב האיבר הi בסדרה, לוקח בפתרון סדרתי נאיבי O(N) בפתרון הרקורסיבי
הנאיבי זה לוקח זמן אקספוננציאלי, וזה סתם משום שמחשבים דברים פעמים רבות.
DRYICE