פייתון רקורסיה

45
מבוא לתכנות מדעי הרצאה10 חלק6 רקורסיה2017 Igor Kleiner ©

Upload: igor-kleiner

Post on 22-Jan-2017

59 views

Category:

Education


6 download

TRANSCRIPT

Page 1: פייתון רקורסיה

מבוא לתכנות מדעי

6חלק 10הרצאה רקורסיה

2017

Igor Kleiner ©

Page 2: פייתון רקורסיה

מטרה

להבין מה היא רקורסיה

ללמוד איך להשתמש בפייתון בפונקציות רקורסיביות

לראות דוגמאות שונות לשימוש ברקורסיה

Page 3: פייתון רקורסיה

רקורסיה

"כדי להבין רקורסיה יש להבין רקורסיה"

Page 4: פייתון רקורסיה

רקורסיה

"כדי להבין רקורסיה יש להבין רקורסיה"

רקורסיה היא דרך לפתרון בעיות

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

Page 5: פייתון רקורסיה

הדגמה

לא יודיעם איך לבצע את החישובונניח שאנו!5נניח שאנו צריכים לחשב

!4חישוב של :לבעיה יותר קטנה!5לשבור את הביעה חישוב ננסה

Page 6: פייתון רקורסיה

הדגמהלא יודיעם איך לבצע את החישובונניח שאנו!5נניח שאנו צריכים לחשב •

!4לבעיה יותר קטנה חישוב של 5!לשבור את הביעה חישוב ננסה•

!4מספיק לנו לחשב לכן!4*5=!5-זה לא קשה היות ו•

!3לבעיה יותר קטנה חישוב של !4חישוב הביעהאתלשבורננסה•

1*2=!1*2=!2ואז , !2*3=!3, !2נעזר בחישוב של !3כדי לחשב , !3*4=!4•

Page 7: פייתון רקורסיה

הדגמה:אחרבכתיב

Factorial(n)=n*factorial(n-1)

Factorial(1)=1

משוואת רקורסיה

תנאי עצירה

Page 8: פייתון רקורסיה

הדגמה:אחרבכתיב

Factorial(n)=n*factorial(n-1)

Factorial(1)=1

משוואת רקורסיה

תנאי עצירה

Page 9: פייתון רקורסיה

הדגמה:אחרבכתיב

Factorial(n)=n*factorial(n-1)

Factorial(1)=1

משוואת רקורסיה

תנאי עצירה

Page 10: פייתון רקורסיה

רקורסיהשלחוקים3

(base case)לרקורסיה תמיד צריך להיות תנאי עצירה 1.

Page 11: פייתון רקורסיה

רקורסיהשלחוקים3

(base case)לרקורסיה תמיד צריך להיות תנאי עצירה 1.

פותרים בעיה יותר )בפתרון רקורסיבי אנו כל צעד מתקרבים לכיוון של תנאי עצירה 2.(פשוטה

Page 12: פייתון רקורסיה

רקורסיהשלחוקים3

(base case)לרקורסיה תמיד צריך להיות תנאי עצירה 1.

פותרים בעיה יותר )בפתרון רקורסיבי אנו כל צעד מתקרבים לכיוון של תנאי עצירה 2.(פשוטה

פונקציה רקורסיבית קוראת לעצמה3.

Page 13: פייתון רקורסיה

רקורסיהשלחוקים3

(base case)לרקורסיה תמיד צריך להיות תנאי עצירה 1.

פותרים בעיה יותר )בפתרון רקורסיבי אנו כל צעד מתקרבים לכיוון של תנאי עצירה 2.(פשוטה

פונקציה רקורסיבית קוראת לעצמה3.

Page 14: פייתון רקורסיה

חישוב עצרת: הדגמה

Page 15: פייתון רקורסיה

חישוב עצרת: הדגמה

Page 16: פייתון רקורסיה
Page 17: פייתון רקורסיה
Page 18: פייתון רקורסיה
Page 19: פייתון רקורסיה
Page 20: פייתון רקורסיה

:2דוגמא

הרקורסיבעזרתS(n)=1+2+3+4+….+n: חשב

Page 21: פייתון רקורסיה

:2דוגמא

רקורסיהבעזרתS(n)=1+2+3+4+….+n: חשב

?=(?)S:עצירהתנאי

Page 22: פייתון רקורסיה

:2דוגמא

רקורסיהבעזרתS(n)=1+2+3+4+….+n: חשב

S(0)=0:עצירהתנאי

Page 23: פייתון רקורסיה

:2דוגמא

רקורסיהבעזרתS(n)=1+2+3+4+….+n: חשב

S(0)=0:עצירהתנאי

??(?)S(n)=S:רקורסיהמשוואת

Page 24: פייתון רקורסיה

:2דוגמא

רקורסיהבעזרתS(n)=1+2+3+4+….+n: חשב

S(0)=0:עצירהתנאי

?+S(n)=S(n-1):רקורסיהמשוואת

Page 25: פייתון רקורסיה

:2דוגמא

רקורסיהבעזרתS(n)=1+2+3+4+….+n: חשב

S(0)=0:עצירהתנאי

S(n)=S(n-1)+n:רקורסיהמשוואת

Page 26: פייתון רקורסיה

:2דוגמא

רקורסיהבעזרתS(n)=1+2+3+4+….+n: חשב

S(0)=0:עצירהתנאי

S(n)=S(n-1)+n:רקורסיהמשוואת

Page 27: פייתון רקורסיה

:2דוגמא

רקורסיהבעזרתS(n)=1+2+3+4+….+n: חשב

S(0)=0:עצירהתנאי

S(n)=S(n-1)+n:רקורסיהמשוואת

Page 28: פייתון רקורסיה

:2דוגמא

רקורסיהבעזרתS(n)=1+2+3+4+….+n: חשב

S(0)=0:עצירהתנאי

S(n)=S(n-1)+n:רקורסיהמשוואת

Page 29: פייתון רקורסיה

:2דוגמא

רקורסיהבעזרתS(n)=1+2+3+4+….+n: חשב

S(0)=0:עצירהתנאי

S(n)=S(n-1)+n:רקורסיהמשוואת

:רקורסיהללאפתרון

Page 30: פייתון רקורסיה

:3דוגמא? פולינדרוםהיאSמחרוזתהאם

Page 31: פייתון רקורסיה

:3דוגמאBlaabllbaalB? פולינדרוםהיאSמחרוזתהאם

גם פולינדרוםT-וa=b: מ"אםפולינדרום היאaTbלומר כ, 2-מגדולבאורךמחרוזת

Page 32: פייתון רקורסיה

:3דוגמאBlaabllbaalB? פולינדרוםהיאSמחרוזתהאם

גם פולינדרוםT-וa=b: מ"אםפולינדרום היאaTbבלומר , 2-מגדולבאורךמחרוזת

פולינדרום0או 1כל מחרוזת באורך : עצירהתנאי

גם T-וa=bם"אםפולינדרים היאS=aTbאזי 2-אם אורך מחרוזת גדול מ: רקורסיהצעדפולינדרום

Page 33: פייתון רקורסיה

:3דוגמאBlaabllbaalB? פולינדרוםהיאSמחרוזתהאם

גם פולינדרוםT-וa=b: מ"אםפולינדרום היאaTbבלומר , 2-מגדולבאורךמחרוזת

פולינדרום0או 1כל מחרוזת באורך : עצירהתנאי

גם T-וa=bם"אםפולינדרים היאS=aTbאזי 2-אם אורך מחרוזת גדול מ: רקורסיהצעדפולינדרום

Page 34: פייתון רקורסיה

:3דוגמאBlaabllbaalB? פולינדרוםהיאSמחרוזתהאם

גם פולינדרוםT-וa=b: מ"אםפולינדרום היאaTbבלומר , 2-מגדולבאורךמחרוזת

פולינדרום0או 1כל מחרוזת באורך : עצירהתנאי

גם T-וa=bם"אםפולינדרים היאS=aTbאזי 2-אם אורך מחרוזת גדול מ: רקורסיהצעדפולינדרום

Page 35: פייתון רקורסיה

:3דוגמאBlaabllbaalB? פולינדרוםהיאSמחרוזתהאם

גם פולינדרוםT-וa=b: מ"אםפולינדרום היאaTbבלומר , 2-מגדולבאורךמחרוזת

פולינדרום0או 1כל מחרוזת באורך : עצירהתנאי

גם T-וa=bם"אםפולינדרים היאS=aTbאזי 2-אם אורך מחרוזת גדול מ: רקורסיהצעדפולינדרום

Page 36: פייתון רקורסיה
Page 37: פייתון רקורסיה

:4דוגמא

:פיבונציסדרה

: תזכורת

F(0)=1,F(1)=1, F(N)=F(N-1)+F(N-2)

Page 38: פייתון רקורסיה

:4דוגמא

:פיבונציסדרה

: תזכורת

F(0)=1,F(1)=1, F(N)=F(N-1)+F(N-2)

:רקורסיביפתרון

?:עצירהתנאי

Page 39: פייתון רקורסיה

:4דוגמא

:פיבונציסדרה

: תזכורת

F(0)=1,F(1)=1, F(N)=F(N-1)+F(N-2)

:רקורסיביפתרון

F(0)=1,F(1)=1:עצירהתנאי

Page 40: פייתון רקורסיה

:4דוגמא

:פיבונציסדרה

: תזכורת

F(0)=1,F(1)=1, F(N)=F(N-1)+F(N-2)

:רקורסיביפתרון

F(0)=1,F(1)=1:עצירהתנאי

?: רקורסיהמשוואת

Page 41: פייתון רקורסיה

:4דוגמא

:פיבונציסדרה

: תזכורת

F(0)=1,F(1)=1, F(N)=F(N-1)+F(N-2)

:רקורסיביפתרון

F(0)=1,F(1)=1:עצירהתנאי

F(N)=F(N-1)+F(N-2): רקורסיהמשוואת

Page 42: פייתון רקורסיה

:4דוגמא

: י'סדרה פיבונאצ

: תזכורת

F(0)=1,F(1)=1, F(N)=F(N-1)+F(N-2)

:רקורסיביפתרון

F(0)=1,F(1)=1:עצירהתנאי

F(N)=F(N-1)+F(N-2): רקורסיהמשוואת

Page 43: פייתון רקורסיה

:4דוגמא

:ונציבפיסדרה

F(0)=1,F(1)=1, F(N)=F(N-1)+F(N-2)

ירקורסיבלאפתרון

http://www.codeskulptor.org/#user42_t2xQVItJnu_1.py

Page 44: פייתון רקורסיה

סיכום

פונקציה יכולה לקרוא לעצמה

לפעמים קל לפתור בעיה דרך רקורסיה

בפתרון רקורסיבי חשוב לציין תנאי עצירה

נכוןרקורסיהמשוואתלהגדירחשוב

Page 45: פייתון רקורסיה