המצגת נטענת. אנא המתן

המצגת נטענת. אנא המתן

מבוא למדעי המחשב הרצאה מספר 12: רקורסיה

מצגות קשורות


מצגת בנושא: "מבוא למדעי המחשב הרצאה מספר 12: רקורסיה"— תמליל מצגת:

1 מבוא למדעי המחשב 234111 הרצאה מספר 12: רקורסיה
מבוא למדעי המחשב הרצאה מספר 2 רמי כהן, מדעי המחשב, הטכניוןכל הזכויות שמורות ©

2 הגדרה Wikipedia רֵקוּרְסִיָּה (בעברית: נסיגה) היא תופעה שכל מופע שלה מכיל מופע נוסף שלה, כך שהיא מתרחשת ומשתקפת בשלמותה בתוך עצמה שוב ושוב. נכתב ע"י יעל ארז. © כל הזכויות שמורות.

3 אלגוריתם רקורסיבי – צעד הרקורסיה
מתי נשתמש ברקורסיה? נתונה בעיה לקלט בגודל n. ניתן לפתור בקלות אם היה לנו את הפתרון לאותה בעיה עם קלט בגודל n-1. דוגמא – חישוב עצרת. אם ידוע (n-1)! נותר לכפול ב n כדי לקבל את n!. טכנית ממומש ע"י פונקציה הקוראת לעצמה או לפונקציה הקוראת לה. נכתב ע"י יעל ארז. © כל הזכויות שמורות.

4 אלגוריתם רקורסיבי – תנאי עצירה
מתי נעצור את הרקורסיה? כאשר הקלט כזה שהפתרון ידוע מראש, נעצור את הרקורסיה. בדוגמת העצרת – נעצור כאשר n הוא 0. נכתב ע"י יעל ארז. © כל הזכויות שמורות.

5 אלגוריתם רקורסיבי – חישוב עצרת
1. מניחים שעבור קלט קטן יותר הבעיה פתורה כלומר (n-1)! נתון. 2. פותרים את הבעיה באמצעות הפתרון הנתון. n!=n*(n-1)! 3. מוסיפים תנאי עצירה – פתרון ידוע מראש לקלט בסיסי. עבור n=0 הפתרון ידוע והוא תנאי העצירה יהיה לפני הקריאה הרקורסיבית! int factorial(int n) { } if (n==0) return 1; int res = factorial(n-1); return res*n; הוכחה באינדוקציה... נכתב ע"י יעל ארז. © כל הזכויות שמורות.

6 מבנה פונקציה רקורסיבית
return_type name(parameter list) { } תנאי עצירה צעד רקורסיבי לציין שזהו מבנה טיפוסי לרוב הרקורסיות לממש את כל הדוגמאות. להראות את מחסנית הקריאות לפחות בדוגמא אחת מבוא למדעי המחשב הרצאה מספר 2 רמי כהן, מדעי המחשב, הטכניוןכל הזכויות שמורות ©

7 אלגוריתם רקורסיבי – חישוב עצרת
נעקוב אחר הקריאות הרקורסיביות עבור n=3: x=factorial(3) x=6 factorial(2)*3 2*3 צעד הרקורסיה factorial(1)*2 קיפול הרקורסיה 1*2 factorial(0)*1 1*1 return 1 תנאי עצירה נכתב ע"י יעל ארז. © כל הזכויות שמורות.

8 אלגוריתם רקורסיבי – חישוב עצרת
איך נראית המחסנית? return 1 factorial(0)*1 factorial(1)*2 factorial(2)*3 x=factorial(3) נכתב ע"י יעל ארז. © כל הזכויות שמורות.

9 אלגוריתם רקורסיבי – חישוב עצרת
איך נראית המחסנית? return 1 factorial(0)*1 1*1 factorial(1)*2 1*2 factorial(2)*3 2*3 x=factorial(3) x=6 נכתב ע"י יעל ארז. © כל הזכויות שמורות.

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

11 אלגוריתם רקורסיבי – חישוב חזקה
f(x,n) מחזירה את החזקה ה n-ית של x. int f(int x, int n) { } נכתב ע"י יעל ארז. © כל הזכויות שמורות.

12 רקורסיה – דוגמאות נוספות
מיון מערך a בגודל n סכום האיברים במערך בגודל n אםn<=1 המערך ממוין מצא את האיבר הגדול ביותר והעבר אותו למקום האחרון מיין מערך a בגודל n-1. אם n==0 החזר 0 סכום האיברים במערך בגודל n-1 + האיבר האחרון נכתב ע"י יעל ארז. © כל הזכויות שמורות.

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

14 סיבוכיות זמן ומקום של רקורסיות
void helper(int n) { if (n <= 1) { printf(“The End!"); return; } helper(n/3); קבע\י את סיבוכיותה של התוכנית הבאה כפונקציה של n בזמן T(n) ובמקום S(n). סיבוכיות זמן: סה"כ זמן הריצה, כלומר סכום הזמנים של כל הקריאות לפונקציה סיבוכיות מקום: הזכרון המקסימלי הנדרש ע"י מסלול הקריאות הגדול ביותר (מבחינת צריכת זכרון) 11 הרצאה מבוא למדעי המחשב. כל הזכויות שמורות ©

15 סיבוכיות זמן ומקום של רקורסיות
עץ הקריאות הרקורסיבי כל צומת מתאר ריצה של הפונקציה קשת מתארת קריאה לפונקציה נצייר את העץ עבור n=9: להדגים על כל המימושים מבוא למדעי המחשב הרצאה מספר 2 רמי כהן, מדעי המחשב, הטכניוןכל הזכויות שמורות ©

16 מבוא למדעי המחשב. כל הזכויות שמורות ©
עץ הקריאות הרקורסיבי void helper(int n) { if (n <= 1) { printf(“The End!"); return; } helper(n/3); עומק המחסנית בפעולת הרקורסיה תהיה log3n וזהו גם גודל הזיכרון שיידרש, כלומר, S(n)=Θ(logn). h(9) h(3) h(3) h(3) h(1) h(1) h(1m) h(1) h(1) h(1m) h(1) h(1) h(1) Print Print Print Print Print Print Print Print Print 11 הרצאה מבוא למדעי המחשב. כל הזכויות שמורות ©

17 טור רקורסיבי – סיבוכיות מקום
נסמן ב S(n) את כמות הזכרון הנדרש של הפונקציה ונבטא אותו כפונקציה של S(k) כאשר k<n S(n) = 1+max(S(n/3), S(n/3), S(n/3)) = 1+S(n/3) = 1+)1+S(n/3^2)) = … = 1+1+…+1+S(n/3^k) = log(n)+S(1)=log(n)+1 כלומר, S(n)=Θ(logn). void helper(int n) { if (n <= 1) { printf(“The End!"); return; } helper(n/3); K פעמים 11 הרצאה מבוא למדעי המחשב. כל הזכויות שמורות ©

18 מבוא למדעי המחשב. כל הזכויות שמורות ©
טור רקורסיבי – סיבוכיות זמן נסמן ב T(n) את כמות הזכרון הנדרש של הפונקציה ונבטא אותו כפונקציה של T(k) כאשר k<n void helper(int n) { if (n <= 1) { printf(“The End!"); return; } helper(n/3); כלומר, T(n)=Θ(n). 11 הרצאה מבוא למדעי המחשב. כל הזכויות שמורות ©

19 סיבוכיות ברקורסיה – סיכום
סיבוכיות זמן: סה"כ זמן הריצה סיבוכיות מקום: הזכרון המקסימלי הנדרש ע"י מסלול הקריאות הגדול ביותר פתרון ע"י עץ הקריאות או טור רקורסיבי. נכתב ע"י יעל ארז. © כל הזכויות שמורות.


הורד את "ppt "מבוא למדעי המחשב הרצאה מספר 12: רקורסיה

מצגות קשורות


מודעות Google