עבור לתוכן

משהו קטן שאני לא מבין ברקורסיה על עץ בינארי

Featured Replies

פורסם

שלום.

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

למשל אם ניקח את העץ הזה:

84684923.jpg

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

הבעיה שאם לדוגמא בעץ הוא התחיל ב-8 ואז -3 ואז 8 , עכשיו בחזור מה הוא מחזיר בדיוק?

0 ואז מה? מן הסתם שהוא מחזיר 1 בכל פעם אבל לא הבנתי למה ואיך...

תודה מראש

[attachment deleted by admin]

פורסם

הקוד שצירפת סופר כמה קודקודים יש בעץ.

הוא בעצם אומר: אם העץ ריק אז יש לו 0 קודקודים.

אם העץ לא ריק - אז כמות הקודקודים בו היא:

כמות הקודקודים בתת העץ הימני

ועוד

כמות הקודקודים בתת העץ השמאלי

ועוד 1 בשביל הקודקוד עצמו.

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

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

פורסם
  • מחבר

על פי מה שאני מבין - זה פשוט לא נכון.

ה+1 נעשה פעם אחת רק בסוף - אני טועה?

אשמח אם עוד מישהו יכול לאמת את דבריו של Armageddon26 , אם הם נכונים או לא

פורסם

ארמגדון צודק...

בשביל לתפוס את סדר הפעולות תנסה לעשות סימולציה בראש על עץ עם שני בנים בלבד -

נניח העץ הקיים כשהשורש הוא 8 ויש לו רק שני בנים - (3-) השמאלי , ו-20 הימני וזהו.

אם זה עדיין לא מסתדר לך אני יכתוב לך את הסימולציה.

פורסם
  • מחבר

אז מה הוא אמור להחזיר? 1?

פורסם

לא, הוא אמור להחזיר את מספר הnodes שבעץ

אין לך מושג ברקורסיה הא

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

פורסם

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

בכל פעם היא קוראת לעצמה כאשר היא זוכרת את הערכים מהרצות קודמות שלה.

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

בפעם הראשונה שהיא פועלת היא מקבלת את השורש 8.

מתבצעת בדיקה האם הקלט ריק - תשובה שלילית (הרי הוא הצומת שמכיל את 8 ).

כעת מוחזר הערך של תוצאת הרצת הפונקציה על הבן השמאלי של 8 שזה 3- ועוד התוצאה של הרצה על הבן הימני שזה 20, ועוד 1 בלי קשר לשאר התוצאות.

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

בוא נניח שהעץ שלנו היה רק שלושת הצמתים הראשונים האלה.

הפונקצייה רצה על 20. מכיוון שאין לו בנים, הרצת הפונקצייה על הבן הימני (שאינו קיים) תחזיר 0 וכנ"ל עבור הבן השמאלי. כלומר השורה האחרונה תחזיר 0+0+1.

בדיוק באותו אופן הרצה על 3- תחזיר 1.

עכשיו בזכרון עדיין קיים 1 שצריך להוסיף כשהפונקצייה רצה על 8.

סה"כ תקבל 1+1+1=3.

באותו אופן אתה יכול להרחיב את הרעיון הזה לעץ גדול יותר...

פורסם
  • מחבר

סבבה, תודה על ההסבר המפורט . :xyxthumbs:

פורסם

:xyxthumbs: :xyxthumbs: :xyxthumbs:

זה היה אחלה של הסבר

פורסם

אחלה בחלה של הסבר! תודה. :xyxthumbs:

ארכיון

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

דיונים חדשים