עבור לתוכן

עזרה - דרכי לימוד חשיבה רקורסיבית

Featured Replies

פורסם

שלום,

אני די איטי, ויכול להיות שמשהו בי דפוק, אבל for the love of god מדוע כ"כ קשה לי להבין את הקונספט הזה.

כן, קראתי כל מאמר בנושא, וכן אני מבין את עניין פיבונאצי והדוגמאות הקלות, אבל כאשר אני מתחיל לקרוא על דוגמאות עם שתי קריאות רקורסיביות באותה השיטה (מגדלי הנוי) , אני פשוטו כמשמעו מאבד את הצפון. אני לא מבין מי רץ ומתי וכו' וכו'.

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

לשאלתי - התוכלו בבקשה להפנות אותי לחומר מקיף וממצה בתחום, כולל תרגול פתור, בבקשה ?

המון תודה.

שרון.

נערך על-ידי bnw434

פורסם

תערוך בבקשה את הכותרת למשהו נורמלי, כך שתכיל את תמצית הבקשה שלך.

נערך על-ידי שניצל

פורסם

בקטע של מימוש: האם אתה מבין איך קריאות לפונקציה עובדות במחשב? את הרעיון של מחסנית קריאות?

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

תחשוב על זה ככה: איך ממינים מערך בגודל N? אני לא יודע (ברור שאני יודע...) אבל:

1) נמצא דרך להקטין את הבעיה (אני אחלק את המערך לשני חלקים A ו-B, שבהכרח קטנים יותר.)

2) המפתח לעניין: נניח שאני יודע איך לפתור את הבעיה הקטנה יותר, לא משנה איך, ונמצא איך לעבור מהפתרון של הבעיה הקטנה לגודל הנוכחי (אחרי שמיינתי (איכשהו!) את A ואת B, אני אמזג אותם - קל לי למזג שני מערכים ממויינים).

3) נמצא תנאי עצירה - כאשר הבעיה קטנה ופשוטה מספיק, אני יודע לפתור אותה ישירות (קל למיין מערך עם 2 איברים או פחות).

והנה האלגוריתם הרקורסיבי: סוג של merge sort

מיון (מערך A)

  1. אם אורך A הוא 1 או פחות: צא והחזר את A כמו שהוא
  2. אם אורך A הוא 2:

    1. אם A0 גדול מ-A1: החלף בין A0 ל-A1
    2. צא החזר את A

    3. X = מיון(חצי ראשון של A)
    4. Y = מיון(חצי שני של A)
    5. מזג את X ו-Y לתוך A
    6. החזר את A


      (אגב החתימה שלי היא מימוש רקורסיבי של quick sort ב-haskell, שפה פונציונלית אשר אוהבת רקורסיות. אתה יכול לראות שהפוקנציה qsort קוראת לעצמה פעמיים.)

נערך על-ידי Zelig

פורסם
  • מחבר

לממש אני יודע לממש. הבעיות הן כדלהלן -

1) אני מאוד מתבלבל כאשר יש שתי רקורסיות בשיטה.- לדוגמא מבוך או מגדלי הנוי. אני פשוט מסתבך נורא ולא מסוגל לעקוב אחרי הסטאק..

2) להגיע לדרך בה התוכנית צריכה לעבוד.

האם ישנם חומרים בנושא (כולל שאלות ופתרונות ) ??

נערך על-ידי bnw434

פורסם

השיטה הכי מסודרת ובטוחה היא לקחת דוגמה קטנה - למשל עבור N=4 ולצייר לך טבלת מעקב:

1. אחרי השלב ברקורסיה

2. אחרי המשתנים שלך

3. לבדוק אם תנאי העצירה מתקיים.

הוכחות באינדוקציה אתה מכיר?

פורסם
  • מחבר
השיטה הכי מסודרת ובטוחה היא לקחת דוגמה קטנה - למשל עבור N=4 ולצייר לך טבלת מעקב:

1. אחרי השלב ברקורסיה

2. אחרי המשתנים שלך

3. לבדוק אם תנאי העצירה מתקיים.

הוכחות באינדוקציה אתה מכיר?

כן.

פורסם

בעיה עם מבנה רקורסיבי היא בעיה שמוגדרת / נפתרת על ידי שילוב גרסאות פשוטות של אותה בעיה.

דוגמא: ביטוי אריתמטי מורכב מתתי-ביטויים אשר משולבים ע"י פעולה כגון כפל, חיבור, חיסור וכו'.

כאשר אתה רואה בעיה, קודם כל נסה למצוא את המבנה הרקורסיבי.

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

אתה יכול לצייר מעין עץ כזה, אשר מתחיל מהרבה בעיות קטנות שקל לפתור, אשר משתלבות ביחד לפתרון בעיה גדולה יותר, וכן הלאה.

פורסם

הייתה לי את אותה בעיה כמו לך ולא הצלחתי אפילו תרגילים פשוטים.

מה שעשיתי זה התחלתי לפתור ממש מהתחלה תרגילים ממש דביליים ועכשיו אני יכול להגיד לך שמומחה אני לא אבל העלתי את הרמה שלי בתרגילים האלו בהרבה.

תראה פה יש הרבה תרגילים פשוטים: http://shaytavor.com/Item.aspx?id=ex013

עצה שלי: תתחיל מפה ותפתור את הכל, אח"כ תתקדם לתרגילים מורכבים יותר

אם אתה לא מבין או מצליח משהו אל תוותר ותשאל פה.

בהצלחה

נערך על-ידי falukky

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים