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

22
םםםם םםםם םםםםםםםם274121 ההההה8 : ההההההההה ההההההההםםםםם.- םםםםם םםםםם- םםםם םם םםםםם םם םם םםםםם םםםםםם ם"ם םם םםםם, םםםםם םםםםםםםם, םםםם םםםםםם, םםםם םםםםם םם םםם םםםם םםםםם םםםםם םםםם

Upload: hoyt-vinson

Post on 01-Jan-2016

41 views

Category:

Documents


3 download

DESCRIPTION

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

TRANSCRIPT

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

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

: אינדוקציה ורקורסיה8הרצאה

נכתב על-ידי ראובן בר-יהודה.

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

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

רקורסיה

(WIKIהגדרה רקורסיבית )מתוך •. מסתמכת על עצמה אם היא הגדרה רקורסיביתהגדרה היא •

דוגמאות:

הוא מי שנולד לאם יהודי: "אדם יהודית ההלכהלפי ה•

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

מה, רות, היא יהודייה. אך בהתאם להגדרה, דבורה יהודייה אם א"יהודייה. כדי לבדוק אם רות היא יהודייה צריך להשתמש שוב

בהגדרה הרקורסיבית, וכך הלאה. תנאי עצירה יהיה בתחילת קיומו של עמ"י.

רקורסיה לערך "רקורסיה": "ראו ערך הומוריסטית־מילוניתהגדרה •."

2

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

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

3

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

אינדוקציה

4

בסיס: הראשון נופל.

צעד: אם מישהו נופל, אז זה שאחריו נופל

...OK(1) OK(n-1) OK(n)

OK(1)

OK(n-1) OK(n)

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

רקורסיה

5

ליפולn-1 מבקש מדומינו nדומינו

ליפולn-2מבקש מדומינו n-1דומינו

...

ליפול1מבקש מדומינו 2דומינו

נופל ורק אז מפולת הדומינו מתחילה1

...האם את

?יהודיה

האם את

?יהודיה

האם את

?יהודיה

האם את

?יהודיה

האם את

?יהודיה

הש

מ

הור

בד

תרו

השר

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

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

הרלוונטית.

6שרה

משהדבורה

רות

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

7

ונוסחאות נסיגה )*( רקורסיה

a1( סדרת אברים ,..,an מוגדרת ע”י “נוסחת נסיגה” (או (..,

"נוסחה רקורסיבית") באופן הבא:

–an מוגדר באופן ישיר עבורn=1,2,..,k כאשר , k "קבוע "קטן ).k=1התלוי בסדרה (בדרך כלל

.תנאי עצירה, או בסיס הרקורסיהחלק זה בהגדרה נקרא גם •

האברים k מוגדר כפונקציה של an, האבר k גדול מ n עבור –.an-1 , an-2,…,an-k(an = fהקודמים לו בסדרה: (

צעד הרקורסיה"חלק זה הוא "•

----------------------------------------------(*) רקורסיה: נסיגה בלטינית

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

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, …

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

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

בסיס הרקורסיה

קריאה רקורסיבית

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

10

הגדרה כללית של "פונקציה רקורסיבית":

, שהוא "פרמטר nלכל קלט מותאם מספר טבעי •הרקורסיה".

:nפעולת הפונקציה תלויה בערכו של "קטן" הנקבע ע"י הפונקציה, k ,עבור n ≤ kבסיס הרקורסיה: אם–

התוצאה מחושבת באופן ישיר .הפונקציה עשויה לקרוא לעצמה פעם , k < nקריאה רקורסיבית: אם –

אחת או מספר פעמים; כל הקריאות הרקורסיביות מתבצעות על . nקלטים עם פרמטרים הקטנים ממש מ

התוצאה מחושבת ע"ס התוצאות של הקריאות הרקורסיביות.–

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

11

קריאה רקורסיבית במטלאב:

הכללים בקריאה רקורסיבית לפונקציה זהים לכללים הרגילים •לקריאת פונקציה:

כאשר פונקציה קוראת לעצמה באופן רקורסיבי, קיימים שני עותקים •שונים של אותה פונקציה: "הפונקציה הקוראת" ו"הפונקציה

הנקראת".עם ביצוע הקריאה הרקורסיבית:•

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

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

עם סביבת עבודה פרטית משלו.

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

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

בסיס הרקורסיה

קריאה רקורסיבית

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

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

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

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

הנחת האינדוקציה

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

Recursive Mona Liza

(מיקום, גודל)צייר_מונה

צייר_מלבן(מיקום, גודל)1.

אם הגודל קטן מדי, סיים.2.

צייר_פרצוף(מיקום, גודל)3.

(מיקום, גודל מוקטן)צייר_מונה4.

15

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

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

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

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

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

18

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

19

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

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

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

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

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

>> 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

הרצה, צעד צעד