נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
מדעי המחשב
RSS UnderWarrior Forums : RSS מדעי המחשב
נושא

נושא: פעולות רקורסיביות

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
guest
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 16 October 2008 בשעה 22:07 | IP רשוּם
ציטוט guest

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


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 17 October 2008 בשעה 16:26 | IP רשוּם
ציטוט אולי...

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

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

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

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

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

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

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

פתרון פסאודו-קוד -
מצא_איבר_מקס(עץ)
1. אם לעץ אין בנים החזר את תוכן השורש.
2. שים ב-max מינוס אינסוף.
3. בעבור כל תת עץ בצע:
  3.1 מצא_איבר_מקס(תת עץ) = x
  3.2 אם x > max
    3.2.1 max = x
4. החזר את max.

חזרה לתחילת העמוד הצג את כרטיס החבר של אולי... חפש הודעות אחרות של אולי... בקר בדף הבית של אולי...
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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