1 / 22

קורס מחשב לרפואנים 274121

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

hoyt-vinson
Télécharger la présentation

קורס מחשב לרפואנים 274121

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. רקורסיה • הגדרה רקורסיבית (מתוך WIKI) • הגדרה היא הגדרה רקורסיבית אם היא מסתמכת על עצמה. דוגמאות: • לפי ההלכה היהודית: "אדם יהודיהוא מי שנולד לאם יהודייה". משמעות ההגדרה הרקורסיבית הינה שעל מנת לדעת אם אדם פלוני, משה, הוא יהודי יש לדעת אם אִמו, דבורה, היא יהודייה. אך בהתאם להגדרה, דבורה יהודייה אם אִמה, רות, היא יהודייה. כדי לבדוק אם רות היא יהודייה צריך להשתמש שוב בהגדרה הרקורסיבית, וכך הלאה. תנאי עצירה יהיה בתחילת קיומו של עמ"י. • הגדרה מילונית־הומוריסטית לערך "רקורסיה": "ראו ערך רקורסיה".

  3. אינדוקציה ורקורסיה

  4. אינדוקציה OK(1) בסיס: הראשון נופל. צעד: אם מישהו נופל, אז זה שאחריו נופל • OK(n-1) OK(n) ... • OK(n-1) OK(n) OK(1)

  5. רקורסיה דומינו n מבקש מדומינו n-1 ליפול דומינו n-1מבקש מדומינו n-2 ליפול ... דומינו 2מבקש מדומינו 1 ליפול 1 נופל ורק אז מפולת הדומינו מתחילה האם את יהודיה? האם את יהודיה? האם את יהודיה? האם את יהודיה? האם את יהודיה? ... שרה משה דבורה רות

  6. שימו לב שיש עץ של דומינו שהרקורסיה הנ"ל חשפה בו רק את השרשרת הרלוונטית. משה דבורה רות שרה

  7. רקורסיה(*) ונוסחאות נסיגה סדרת אברים (a1,..,an ,..) מוגדרת ע”י “נוסחת נסיגה” (או "נוסחה רקורסיבית") באופן הבא: • anמוגדר באופן ישיר עבור n=1,2,..,k , כאשר k קבוע "קטן" התלוי בסדרה (בדרך כלל k=1). • חלק זה בהגדרה נקרא גם בסיס הרקורסיה, או תנאי עצירה. • עבור n גדול מ k, האבר an מוגדר כפונקציה של k האברים הקודמים לו בסדרה: (an-1 , an-2,…,an-k)an = f. • חלק זה הוא "צעד הרקורסיה" ----------------------------------------------(*) רקורסיה: נסיגה בלטינית

  8. דוגמאות להגדרות ע"י נוסחת נסיגה

  9. נוסחת נסיגה מגדירה "פונקציה רקורסיבית": • פונקציה רקורסיבית לחישוב עצרת: • כאשר n<2 הפונקציה מחזירה 1 ועוצרת (תנאי עצירה=בסיס הרקורסיה). • עבור קלט nגדול מ-1 הפונקציה מבצעת "קריאה רקורסיבית": היא קוראת לעצמה עם ערך n-1. • הערך המוחזר הוא: (תוצאת הקריאה הרקורסיבית) n x. function f=myfactr(n) if n<2, f=1; else f=n*myfactr(n-1); end בסיס הרקורסיה קריאה רקורסיבית

  10. הגדרה כללית של "פונקציה רקורסיבית": • לכל קלט מותאם מספר טבעי n, שהוא "פרמטר הרקורסיה".פעולת הפונקציה תלויה בערכו של n: • בסיס הרקורסיה: אםn ≤ k ,עבור k "קטן" הנקבע ע"י הפונקציה, התוצאה מחושבת באופן ישיר . • קריאה רקורסיבית: אם k< n , הפונקציה עשויה לקרוא לעצמה פעם אחת או מספר פעמים; כל הקריאות הרקורסיביות מתבצעות על קלטים עם פרמטרים הקטנים ממש מ n. • התוצאה מחושבת ע"ס התוצאות של הקריאות הרקורסיביות.

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

  12. רקורסיה בחישוב עצרת function f=myfactr(n) if n==1, f=1; else f=n*myfactr(n-1); end בסיס הרקורסיה קריאה רקורסיבית • נעקב אחרי הביצוע של myfactr(5): n = 5 f= 5 * myfactr(5) n = 4 f= 4 * myfactr(4) n = 3 f= 3 * myfactr(3) n = 2 f= 2 * myfactr(2) n = 1 f= 1 myfactr(1)

  13. רקורסיה בחישוב עצרת • המשך ביצוע: "קפול" הרקורסיה. n = 5 f= 5 * myfactr(5) 120 n = 4 f= 4 * 24 myfactr(4) 6 n = 3 f= 3 * myfactr(3) n = 2 f= 2 * myfactr(2) 2 myfactr(1) n = 1 f= 1 1

  14. הוכחת נכונות שלהפונקציה myfactr • טענה: לכל מספר טבעי n, הפונקציה myfactr עם קלט nעוצרת כאשר הערך של המשתנה f הוא n!. • הוכחת נכונות ע"י אינדוקציה על הקלט n: • בסיס: עבור n<2, בדיקה ישירה מראה כי myfactr(1) תחזיר 1. • צעד: נניח כי myfactr(n-1) = (n-1)!. אזי: myfactr(n) = n∙myfactr(n-1) = n∙(n-1)! = n! function f=myfactr(n) if n<2, f=1; else f=n*myfactr(n-1); end הנחת האינדוקציה

  15. Recursive Mona Liza צייר_מונה(מיקום, גודל) • צייר_מלבן(מיקום, גודל) • אם הגודל קטן מדי, סיים. • צייר_פרצוף(מיקום, גודל) • צייר_מונה (מיקום, גודל מוקטן)

  16. Recursive Mona Liza function [] = mona(x,y,r) hold on plot(x+r*[0 2 2 -2 -2 0], y+r*[0 0 4 4 0 0]) axis equal if r < 0.1 return; end face(x, y+3*r, r) mona(x, y, 0.5*r) end

  17. Face for mona function []=segment(x1,y1,x2,y2) hold on plot([x1,x2],[y1,y2]); end • function [] = face(x,y,r) • cycle(x,y,r); • r0 = 0.3975*r; • cycle(x-r/2, y+r/3, r0); • segment(x,y-r/2,x,y+r/2); • cycle(x+r/2, y+r/3, r0); • arc_cycle(x,y,.8*r,1.25*pi,1.75*pi); • end function []=cycle(x0,y0,r) arc_cycle(x0,y0,r,0,2*pi); end function []=arc_cycle(x0,y0,r,A,B) t = linspace(A,B,100); x = cos(t); y = sin(t); plot(r*x+x0, r*y+y0); end

  18. Recursive face function []=segment(x1,y1,x2,y2) hold on plot([x1,x2],[y1,y2]); end function [] = face(x,y,r) hold on axis equal cycle(x,y,r); if r < 0.1 return; end r0 = 0.3975*r; face(x-r/2, y+r/3, r0); segment(x,y-r/2,x,y+r/2); face(x+r/2, y+r/3, r0); arc_cycle(x,y,.8*r,1.25*pi,1.75*pi); end function []=cycle(x0,y0,r) arc_cycle(x0,y0,r,0,2*pi); end function []=arc_cycle(x0,y0,r,A,B) t = linspace(A,B,100); x = cos(t); y = sin(t); plot(r*x+x0, r*y+y0); end

  19. הרצה, צעד צעד >> face2d (0,0,0.8) {0.00,0.00,0.80 Line= 9:{-0.40,0.27,0.32 Line= 9:{-0.56,0.37,0.13 Line= 9:{-0.62,0.41,0.05] Line=11:{-0.50,0.41,0.05] } Line=11:{-0.24,0.37,0.13 Line= 9:{-0.30,0.41,0.05] Line=11:{-0.18,0.41,0.05] } } Line=11:{0.40,0.27,0.32 Line= 9:{0.24,0.37,0.13 Line= 9:{0.18,0.41,0.05] Line=11:{0.30,0.41,0.05] } Line=11:{0.56,0.37,0.13 Line= 9:{0.50,0.41,0.05] Line=11:{0.62,0.41,0.05] } } }

More Related