קורס מחשב לרפואנים 274121
DESCRIPTION
קורס מחשב לרפואנים 274121. הרצאה 8: אינדוקציה ורקורסיה. מבוסס גם על שקפים שחוברו ע"י שי ארצי, גיתית רוקשטיין , איתן אביאור , סאהר אסמיר טל כהן ורון פינטר ושלמה מורן. נכתב על-ידי ראובן בר-יהודה. רקורסיה. הגדרה רקורסיבית (מתוך WIKI ) - PowerPoint PPT PresentationTRANSCRIPT
קורס מחשב לרפואנים274121
: אינדוקציה ורקורסיה8הרצאה
נכתב על-ידי ראובן בר-יהודה.
מבוסס גם על שקפים שחוברו ע"י שי ארצי, גיתית רוקשטיין, איתן אביאור, סאהר אסמיר טל כהן ורון פינטר ושלמה מורן
רקורסיה
(WIKIהגדרה רקורסיבית )מתוך •. מסתמכת על עצמה אם היא הגדרה רקורסיביתהגדרה היא •
דוגמאות:
הוא מי שנולד לאם יהודי: "אדם יהודית ההלכהלפי ה•
יה". משמעות ההגדרה הרקורסיבית הינה שעל מנת לדעת יהודימו, דבורה, היא אם אדם פלוני, משה, הוא יהודי יש לדעת אם א"
מה, רות, היא יהודייה. אך בהתאם להגדרה, דבורה יהודייה אם א"יהודייה. כדי לבדוק אם רות היא יהודייה צריך להשתמש שוב
בהגדרה הרקורסיבית, וכך הלאה. תנאי עצירה יהיה בתחילת קיומו של עמ"י.
רקורסיה לערך "רקורסיה": "ראו ערך הומוריסטית־מילוניתהגדרה •."
2
אינדוקציה ורקורסיה
3
אינדוקציה
4
בסיס: הראשון נופל.
צעד: אם מישהו נופל, אז זה שאחריו נופל
...OK(1) OK(n-1) OK(n)
OK(1)
OK(n-1) OK(n)
רקורסיה
5
ליפולn-1 מבקש מדומינו nדומינו
ליפולn-2מבקש מדומינו n-1דומינו
...
ליפול1מבקש מדומינו 2דומינו
נופל ורק אז מפולת הדומינו מתחילה1
...האם את
?יהודיה
האם את
?יהודיה
האם את
?יהודיה
האם את
?יהודיה
האם את
?יהודיה
הש
מ
הור
בד
תרו
השר
שימו לב שיש עץ של דומינו שהרקורסיה הנ"ל חשפה בו רק את השרשרת
הרלוונטית.
6שרה
משהדבורה
רות
7
ונוסחאות נסיגה )*( רקורסיה
a1( סדרת אברים ,..,an מוגדרת ע”י “נוסחת נסיגה” (או (..,
"נוסחה רקורסיבית") באופן הבא:
–an מוגדר באופן ישיר עבורn=1,2,..,k כאשר , k "קבוע "קטן ).k=1התלוי בסדרה (בדרך כלל
.תנאי עצירה, או בסיס הרקורסיהחלק זה בהגדרה נקרא גם •
האברים k מוגדר כפונקציה של an, האבר k גדול מ n עבור –.an-1 , an-2,…,an-k(an = fהקודמים לו בסדרה: (
צעד הרקורסיה"חלק זה הוא "•
----------------------------------------------(*) רקורסיה: נסיגה בלטינית
8
דוגמאות להגדרות ע"י נוסחת נסיגה
נוסחה "סגורה"an=f(n,<parameters>)
נוסחת נסיגהan=f(an-1,.., an-k)
הסדרה
an = a1 + (n-1)∙d a1
an = an-1 + d
סדרה חשבונית:3, 13, 23, 33, …
an=a1∙qn-1 a1
an = q∙an-1
סדרה הנדסית7, 14, 28, 56, …
אין נוסחה סגורה "יפה" a1 = 1
an = n∙an-1
עצרת1, 2, 6, 24, 120, …
an = (φn - (1 - φ)n) / 5φ = (1+5) / 2 ~= 1.6180כאשר
נקרא "יחס הזהב")φ(המספר
a1 = a2 = 1
an = an-1 + an-2
פיבונאצ'י1, 1, 2, 3, 5, 8, 13, …
9
נוסחת נסיגה מגדירה "פונקציה רקורסיבית":
פונקציה רקורסיבית לחישוב עצרת:•
ועוצרת (תנאי עצירה=בסיס 1 הפונקציה מחזירה n<2 כאשר •.הרקורסיה)
הפונקציה מבצעת "קריאה רקורסיבית": היא 1גדול מ- nעבור קלט •.n-1קוראת לעצמה עם ערך
.n xהערך המוחזר הוא: (תוצאת הקריאה הרקורסיבית) •
function f=myfactr(n) if n<2, f=1; else f=n*myfactr(n-1); end
בסיס הרקורסיה
קריאה רקורסיבית
10
הגדרה כללית של "פונקציה רקורסיבית":
, שהוא "פרמטר nלכל קלט מותאם מספר טבעי •הרקורסיה".
:nפעולת הפונקציה תלויה בערכו של "קטן" הנקבע ע"י הפונקציה, k ,עבור n ≤ kבסיס הרקורסיה: אם–
התוצאה מחושבת באופן ישיר .הפונקציה עשויה לקרוא לעצמה פעם , k < nקריאה רקורסיבית: אם –
אחת או מספר פעמים; כל הקריאות הרקורסיביות מתבצעות על . nקלטים עם פרמטרים הקטנים ממש מ
התוצאה מחושבת ע"ס התוצאות של הקריאות הרקורסיביות.–
11
קריאה רקורסיבית במטלאב:
הכללים בקריאה רקורסיבית לפונקציה זהים לכללים הרגילים •לקריאת פונקציה:
כאשר פונקציה קוראת לעצמה באופן רקורסיבי, קיימים שני עותקים •שונים של אותה פונקציה: "הפונקציה הקוראת" ו"הפונקציה
הנקראת".עם ביצוע הקריאה הרקורסיבית:•
הפונקציה הקוראת עוצרת פעולתה וממתינה. –הפונקציה הנקראת רצה בסביבת עבודה משלה.–כשהפונקציה הנקראת מסיימת, היא מחזירה ערכי פלט (אם יש), –
והפונקציה הקוראת ממשיכה. באופן כללי, כל קריאה לפונקציה יוצרת עותק חדש של הפונקציה, •
עם סביבת עבודה פרטית משלו.
12
רקורסיה בחישוב עצרת
: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)
function f=myfactr(n) if n==1, f=1; else f=n*myfactr(n-1); end
בסיס הרקורסיה
קריאה רקורסיבית
13
רקורסיה בחישוב עצרת
המשך ביצוע: "קפול" הרקורסיה.•
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)
120
24
6
2
1
14
myfactr הפונקציה הוכחת נכונות של
עם קלט myfactrהפונקציה , nטענה: לכל מספר טבעי •n עוצרת כאשר הערך של המשתנהf הוא n!.
:nהוכחת נכונות ע"י אינדוקציה על הקלט •.1 תחזיר myfactr(1), בדיקה ישירה מראה כי n<2 עבור בסיס:–!. אזי: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
הנחת האינדוקציה
Recursive Mona Liza
(מיקום, גודל)צייר_מונה
צייר_מלבן(מיקום, גודל)1.
אם הגודל קטן מדי, סיים.2.
צייר_פרצוף(מיקום, גודל)3.
(מיקום, גודל מוקטן)צייר_מונה4.
15
Recursive Mona Liza
16-25 -20 -15 -10 -5 0 5 10 15 20 250
5
10
15
20
25
30
35
40
1. function [] = mona(x,y,r) 2. hold on 3. plot(x+r*[0 2 2 -2 -2 0], y+r*[0 0 4 4 0 0])4. axis equal5. if r < 0.1 6. return;7. end8. face(x, y+3*r, r)
9. mona(x, y, 0.5*r)10.end
Face for mona
1. function [] = face(x,y,r)
2. cycle(x,y,r);
3. r0 = 0.3975*r;
4. cycle(x-r/2, y+r/3, r0);
5. segment(x,y-r/2,x,y+r/2);
6. cycle(x+r/2, y+r/3, r0);
7. arc_cycle(x,y,.8*r,1.25*pi,1.75*pi);
8. end
17
1. function []=segment(x1,y1,x2,y2)2. hold on3. plot([x1,x2],[y1,y2]);4. end
1. function []=arc_cycle(x0,y0,r,A,B)2. t = linspace(A,B,100);3. x = cos(t); y = sin(t);4. plot(r*x+x0, r*y+y0);5. end
1. function []=cycle(x0,y0,r)2. arc_cycle(x0,y0,r,0,2*pi);3. end
-10 -8 -6 -4 -2 0 2 4 6 8 10-10
-8
-6
-4
-2
0
2
4
6
8
10
18
19
20
0 0.5 1 1.5 2
0.2
0.4
0.6
0.8
1
1.2
1.4
1.6
1.8
Recursive face
21
1.function [] = face(x,y,r) 2. hold on 3. axis equal4. cycle(x,y,r);5. if r < 0.1 6. return;7. end8. r0 = 0.3975*r;
9. face(x-r/2, y+r/3, r0);10. segment(x,y-r/2,x,y+r/2);
11. face(x+r/2, y+r/3, r0);12. arc_cycle(x,y,.8*r,1.25*pi,1.75*pi);13.end
function []=segment(x1,y1,x2,y2) hold on plot([x1,x2],[y1,y2]);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
0 0.5 1 1.5 2
0.2
0.4
0.6
0.8
1
1.2
1.4
1.6
1.8
>> 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]
}
}
}22
00
.5
11
.5
2
0.2
0.4
0.6
0.8
1
1.2
1.4
1.6
1.8
הרצה, צעד צעד