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

Post on 22-Jan-2017

59 Views

Category:

Education

6 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

2017

Igor Kleiner ©

מטרה

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

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

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

רקורסיה

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

רקורסיה

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

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

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

הדגמה

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

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

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

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

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

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

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

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

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

Factorial(1)=1

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

תנאי עצירה

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

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

Factorial(1)=1

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

תנאי עצירה

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

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

Factorial(1)=1

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

תנאי עצירה

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

:2דוגמא

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

:2דוגמא

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

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

:2דוגמא

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

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

:2דוגמא

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

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

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

:2דוגמא

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

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

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

:2דוגמא

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

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

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

:2דוגמא

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

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

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

:2דוגמא

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

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

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

:2דוגמא

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

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

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

:2דוגמא

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

:4דוגמא

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

: תזכורת

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

:4דוגמא

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

: תזכורת

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

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

?:עצירהתנאי

:4דוגמא

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

: תזכורת

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

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

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

:4דוגמא

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

: תזכורת

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

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

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

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

: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): רקורסיהמשוואת

: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): רקורסיהמשוואת

:4דוגמא

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

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

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

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

סיכום

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

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

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

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

top related