• בלוג
  • מתחילים בקונטקסט

מתחילים בקונטקסט

הרבה אנשים יסתכלו על המימוש הרקורסיבי לפונקציית פיבונאצ'י בבהלה:

def fib(n):
    if n <= 1:
        return 1

    return fib(n-1) + fib(n-2)

"אין בזה שום הגיון" הם יגידו. הרי המימוש האיטרטיבי משמעותית יותר יעיל:

def fib(n):
    x, y = 1, 1
    for i in range(n):
        x, y = y, x + y

    return x

אותה תוצאה, אותו אורך של קוד והרבה פחות חישובים.

מתוך הסיפור הזה אפשר בטעות לחשוב שאין טעם לכתוב קוד רקורסיבי, שאין צורך ללמוד רקורסיה או שרקורסיה זה סתם שטיק של מדעי המחשב כדי לסבך לסטודנטים את החיים. בחיים האמיתיים אף אחד לא משתמש בזה.

ולמה זו טעות? כי אי אפשר לפסול שיטת עבודה רק בגלל שהיא לא מתאימה למקרה מסוים. כשמדברים על רקורסיה, נסו לכתוב קוד שידפיס אוביקט JSON לכל עומקו עם כל תתי המפתחות ותגלו שהפיתרון הרקורסיבי הוא משמעותית יותר פשוט ויותר קריא. מאוד קל להבין רקורסיה כשמתחילים מבעיה שדורשת פיתרון כזה.

ואותו כלל עובד גם במקרה הכללי: כשאנחנו מגיעים ללמוד טכניקה חדשה המקום הכי טוב להתחיל בו הוא הקונטקסט, כלומר "מתי משתמשים בזה?" תשובה טובה לשאלה זו היא הבסיס כדי להבין "איך זה עובד?".