40
ייייייי יייי יייייי יייייייי יייייי ייי ייייי יייייי יייי ייייי יייי יייייייי- ייי

רקורסיה מבעד למשקפי הפרדיגמה

Embed Size (px)

DESCRIPTION

רקורסיה מבעד למשקפי הפרדיגמה. רגוניס נוע. מכללת בית-ברל. מכון ויצמן למדע. הוראה בתיכון. רקורסיה מבעד למשקפי הפרדיגמה. רקורסיה מבעד למשקפי הפרדיגמה. תיכנות פרוצדורלי. תיכנות לוגי. רקורסיה היא הצהרתית בכל פרדיגמה. המבנה הבסיסי : מקרה פרטי (מקרה קצה) מקרה מורכב בשלב ה- N –י - PowerPoint PPT Presentation

Citation preview

Page 1: רקורסיה מבעד למשקפי הפרדיגמה

למשקפי מבעד רקורסיההפרדיגמה

רגוניס נוע

הוראה בתיכון

מכון ויצמן למדע

מכללת בית-ברל

Page 2: רקורסיה מבעד למשקפי הפרדיגמה

תיכנותלוגי

תיכנותפרוצדורלי

למשקפי מבעד רקורסיההפרדיגמה

למשקפי מבעד רקורסיההפרדיגמה

Page 3: רקורסיה מבעד למשקפי הפרדיגמה

הצהרתית היא רקורסיהפרדיגמה בכל

המבנה הבסיסי :מקרה פרטי )מקרה קצה(• –יNמקרה מורכב בשלב ה- •

המוגדר על ידי אותו מקרה )מוקטן(N – 1בשלב ה-

הוא הצהרתי

Page 4: רקורסיה מבעד למשקפי הפרדיגמה

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

בכל פרדיגמה

תיכנות לוגי הוא

תיכנות הצהרתי

לכן קל יותר להקנות את עקרונות •הרקורסיה בפרדיגמה הצהרתית.

המעבר לפרדיגמה הפרוצדורלית •הוא בהיר וקל יותר.

Page 5: רקורסיה מבעד למשקפי הפרדיגמה

סדר ההרצאהסדר ההרצאה

רקורסיה חשבונית בתיכנות לוגי

מעבר לרקורסיה חשבונית בתיכנות פרוצדורלי

תיכנות לוגי על קצה המזלג

רקורסיה טבעית בתיכנות לוגי

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

רקורסיה ברשימות בתיכנות פרוצדורלי

Page 6: רקורסיה מבעד למשקפי הפרדיגמה

שפת תיכנות בלוגיקה שפת תיכנות בלוגיקה מתאפיינת בדברים הבאים:מתאפיינת בדברים הבאים:

שפה הצהרתית - משתמשת בלוגיקה להצגת מידע במחשב.

המידע מוצג כאוסף של הנחות – טענות בלוגיקה.

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

"מנגנון ההיסק של השפה "יודעלהבחין בין טענות בלוגיקה שניתן להסיק אותן על פי חוקי הלוגיקה מתוך אוסף ההנחות לבין כאלה

שלא ניתן להסיקן.

Page 7: רקורסיה מבעד למשקפי הפרדיגמה

דוגמא:דוגמא:בעל_חיים :- עוף.

בעל_חיים :- זוחל.בעל_חיים :- יונק.

יונק :- כלב.יונק :- קוף.

כלב.קוף.

נחש.

?- בעל_חיים.

כן.

אוסף טענות בלוגיקה

= בסיס ידע

= תכנית פרולוג

שאילתה

תשובות מנגנון ההיסק

Page 8: רקורסיה מבעד למשקפי הפרדיגמה

דוגמא:דוגמא:(.X( :- עוף)Xבעל_חיים)(.X( :- זוחל)Xבעל_חיים)(.X( :- יונק)Xבעל_חיים)

(.X( :- כלב)Xיונק)(.X( :- קוף)Xיונק)

כלב)בוני(.קוף)קינג_קונג(.

קוף)דודו(.

?- בעל_חיים)_מי(.

_מי = בוני;_מי = קינג_קונג;

_מי = דודו;לא

אוסף טענות בלוגיקה

= בסיס ידע

= תכנית פרולוג

שאילתה

תשובות מנגנון ההיסק

Page 9: רקורסיה מבעד למשקפי הפרדיגמה

מה בין שפת תיכנות מה בין שפת תיכנות פרוצדורלית פרוצדורלית

תיכנות פרוצדורלילשפת תיכנות הצהרתית?לשפת תיכנות הצהרתית?

חזור .... ... לךבצע ....

... ... אזי... אםעשה ...

... - ל קרא

תיכנות הצהרתי

חוק ראשאם מתקייםגוף מרכיבי

החוק מתקיימים

תכנית היא רצףשל הוראות לביצוע

תכנית היא אוסף טענות שיכולות להשתתף בהיסק

Page 10: רקורסיה מבעד למשקפי הפרדיגמה

תכנית פרוצדורלית מול תכנית תכנית פרוצדורלית מול תכנית תכנית הצהרתיתתכנית פרוצדורלית בלוגיקהבלוגיקה

התכנית:התכנית:אלגוריתם המתאר איך לפתור

את הבעיה.

הרצת תכנית:הרצת תכנית:מתן הוראת ביצוע.

אופן פעולה:אופן פעולה:ביצוע סידרתי של ההוראות

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

שמכתיב מראש האלגוריתם.

התכנית:התכנית:תיאור הצהרתי של הבעיה,

אוסף טענות בלוגיקה – בסיס ידע.

"הרצת" תכנית:"הרצת" תכנית:על ידי הצגת שאילתה.

אופן פעולה:אופן פעולה:על פי מנגנון היסק בלוגיקה.

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

להוכיח את השאילתה.אין משמעות לסדר ההנחות.

Page 11: רקורסיה מבעד למשקפי הפרדיגמה

דוגמא - משפחהדוגמא - משפחההורה)אברהם, יצחק(.

הורה)שרה, יצחק(.הורה)יצחק, יעקב(.הורה)יעקב, יוסף(.

זכר)אברהם(.נקבה)שרה(.

זכר)יצחק(.

זכר)יעקב(.זכר)יוסף(.

(.X(, זכר)X, Y( :- הורה)X, Yאב)(.X(, נקבה)X, Y( :- הורה)X, Yאם)

(.Z, Y(, הורה)X, Z( :- אב)X,Yסבא).X \= Y(, Z, Y(, הורה)Z, X( :- הורה)X, Yאחים)

(,Y1, Y(, הורה)X1, X( :- הורה)X, Yבני_דודים)(.X1, Y1 אחים)

Page 12: רקורסיה מבעד למשקפי הפרדיגמה

Y אב קדמון של X( – X, Y% אב_קדמון )מדור כלשהו

( :-X, Yאב_קדמון )(.X, Y הורה )

( :-X, Yאב_קדמון )(,X, Z הורה )

(.Z, Y צאצא )

דוגמא – אב קדמון דוגמא – אב קדמון רקורסיה טבעית !רקורסיה טבעית !

Page 13: רקורסיה מבעד למשקפי הפרדיגמה

המתאר מורכב משני חלקים:מקרה פרטי )מקרה קצה(• –יNמקרה מורכב בשלב ה- •

המוגדר על ידי אותו מקרה )מוקטן(N – 1בשלב ה-

מתאר המוגדר בעזרת עצמו

הרקורסיבי המתאר עקרונות

יכולים להיות מספר מקרים פרטייםיכולים להיות מספר מקרים מורכבים במקרה המורכב יכול להיות יותר

משימוש חוזר אחד בדגם "המוקטן"

Page 14: רקורסיה מבעד למשקפי הפרדיגמה

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

אב קדמון

צאצא

n דורות

m דורות

1דור n=m+1

הורהאב קדמון

צאצא

אב קדמון

בן של אב קדמון

הורה

n-1דורות

בן של אב קדמון

צאצא

Page 15: רקורסיה מבעד למשקפי הפרדיגמה

דוגמא – שרשרת מזון דוגמא – שרשרת מזון רקורסיה טבעית !רקורסיה טבעית !

Y צורך מזון X( – X, Y% צרכן_מזון )

( :-X, Yצרכן_מזון )(.X, Y אוכל )

( :-X, Yצרכן_מזון )(,X, Z אוכל )

(.Z, Y צרכן_מזון )

Y אוכל מזון X( – X, Y% אוכל )אוכל )פרה, עשב(. אוכל )אריה, פרה(.

Page 16: רקורסיה מבעד למשקפי הפרדיגמה

דוגמא – חפש את האפרוח דוגמא – חפש את האפרוח רקורסיה טבעית !רקורסיה טבעית !

% עוטפת )_ביצה_עוטפת, _ביצה(.(.Y, X( :- נמצאת_בתוך )X, Yעוטפת )(,Z, X( :- נמצאת_בתוך )X, Yעוטפת )

(.Z, Y עוטפת )

% נמצאת_בתוך )_ביצה_קטנה, _ביצה_גדולה(.

נמצאת_בתוך )כחולה, ירוקה(. נמצאת_בתוך )ירוקה, אדומה(.נמצאת_בתוך )אפרוח, כחולה(.

Page 17: רקורסיה מבעד למשקפי הפרדיגמה

דוגמא – קווי נסיעה דוגמא – קווי נסיעה באוטובוס רקורסיה באוטובוס רקורסיה

טבעית !טבעית !

% ניתן_להגיע )_מוצא, _יעד( - מסלול כלשהו

ניתן_להגיע )_מוצא, _יעד( :- קו_נסיעה )_מוצא, _יעד(.

ניתן_להגיע )_מוצא, _יעד( :- קו_נסיעה )_מוצא, _ביניים(,ניתן_להגיע )_ביניים, _יעד(.

% קו_נסיעה )_מוצא, _יעד( – קו ישירקו_נסיעה )מטולה, קירית_שמונה(.

קו_נסיעה )קרית_שמונה, טבריה(.

Page 18: רקורסיה מבעד למשקפי הפרדיגמה

דוגמא – מספר דורות דוגמא – מספר דורות רקורסיה חשבוניתרקורסיה חשבונית

Y אב קדמון של X( – X, Y, N% מספר_דורות )N ביניהם מספר הדורות

( :-X, Y, 1מספר_דורות )(.X, Yהורה)

( :-X, Y, Nמספר_דורות )(,X, Zהורה)

(,Z, Y, Mמספר_דורות )N := M + 1.

Page 19: רקורסיה מבעד למשקפי הפרדיגמה

דוגמא – חפש את האפרוח דוגמא – חפש את האפרוח רקורסיה חשבוניתרקורסיה חשבונית

(.Nמספר_ביצים )_ביצה_עוטפת, _ביצה, % ( :- X, Y, 2מספר_ביצים )

(.Y, Xנמצאת_בתוך )( :- X, Y, Nמספר_ביצים )

(,Z, Xנמצאת_בתוך )(,Z, Y, Mמספר_ביצים )

N := M + 1.

נמצאת_בתוך )_ביצה_קטנה, _ביצה_גדולה(. %נמצאת_בתוך )כחולה, ירוקה(. נמצאת_בתוך )ירוקה, אדומה(.נמצאת_בתוך )אפרוח, כחולה(.

Page 20: רקורסיה מבעד למשקפי הפרדיגמה

דוגמא – קווי נסיעה דוגמא – קווי נסיעה באוטובוס רקורסיה באוטובוס רקורסיה

חשבוניתחשבונית

( - מסלול במספר Nמספר_קוים )_מוצא, _יעד, % קוים

( :- 1מספר_קוים )_מוצא, _יעד, קו_נסיעה )_מוצא, _יעד(.

( :- Nמספר_קוים )_מוצא, _יעד, קו_נסיעה )_מוצא, _ביניים(,(,Mמספר_קוים )_ביניים, _יעד,

N := M + 1.

קו_נסיעה )_מוצא, _יעד( – קו ישיר% קו_נסיעה )מטולה, קירית_שמונה(.

קו_נסיעה )קרית_שמונה, טבריה(.

Page 21: רקורסיה מבעד למשקפי הפרדיגמה

דוגמא – קווי נסיעה דוגמא – קווי נסיעה באוטובוס רקורסיה באוטובוס רקורסיה

חשבונית - מחירחשבונית - מחיר

( - מסלול במספר Sסכום_נסיעה )_מוצא, _יעד, % קוים

( :- Sסכום_נסיעה )_מוצא, _יעד, (.Sקו_נסיעה )_מוצא, _יעד,

( :- Sסכום_נסיעה )_מוצא, _יעד, (,S1קו_נסיעה )_מוצא, _ביניים,

(,S2סכום_נסיעה )_ביניים, _יעד, S := S1 + S2.

קו_נסיעה )_מוצא, _יעד, _מחיר( – קו ישיר% (. 20קו_נסיעה )מטולה, קירית_שמונה, (.30קו_נסיעה )קרית_שמונה, טבריה,

Page 22: רקורסיה מבעד למשקפי הפרדיגמה

דוגמא – עצרת ! דוגמא – עצרת ! רקורסיה חשבוניתרקורסיה חשבונית

.F ב- !N ומחזיר את N( – מקבל ערך N, F )% עצרת

(.1, 0עצרת )

(.1, 1עצרת )

( :-N, Fעצרת ) N > 1,

M := N – 1, (,M, F1עצרת )

F := F1 * N.

0 = !1

1 = !1

N! = )N-1(! * N

Page 23: רקורסיה מבעד למשקפי הפרדיגמה

דוגמא – סידרת פיבונאצי דוגמא – סידרת פיבונאצי רקורסיה חשבוניתרקורסיה חשבונית

ומחזיר את הערך N( – מקבל ערך N, F )% פיבונאצי.F בסידרת פיבונאצי בתוך Nשל האיבר ה-

(.0, 1פיבונאצי )

(.1, 2פיבונאצי )

( :-N, Fפיבונאצי ) N1 := N – 1,N2 := N – 2, (,N1, F1פיבונאצי ) (,N2, F2פיבונאצי )

F := F1 + F2.

0 ,1 ,1 ,2 ,3 ,5 ,8 ,13.. , בסידרת פיבונאצי

0 האיבר הראשון הוא –

1 האיבר השני הוא –

וכל איבר אחר הוא

סכום שני קודמיו

Page 24: רקורסיה מבעד למשקפי הפרדיגמה

דוגמא – מספר טבעי דוגמא – מספר טבעי רקורסיה חשבוניתרקורסיה חשבונית

טבעי 'לא' אחרת.N( – 'כן' אם Nמספר_טבעי )%

(.1מספר_טבעי )

( :- Nמספר_טבעי ) N > 0,

M := 1 – N, (.Mמספר_טבעי )

Nטבעי אם

1המספר הקטן ממנו ב- הוא טבעי

Page 25: רקורסיה מבעד למשקפי הפרדיגמה

רקורסיה היא הצהרתית רקורסיה היא הצהרתית בכל פרדיגמהבכל פרדיגמה

0 ,1 ,1 ,2 ,3 ,5 ,8 ,13.. , בסידרת פיבונאצי

0 האיבר הראשון הוא – 1 האיבר השני הוא – וכל איבר אחר הוא

סכום שני קודמיו

Nטבעי אם 1המספר הקטן ממנו ב-

הוא טבעי

0 = !11 = !1

N! = )N-1(! * N

X0 = 1Xy = Xy-1 * X

a1 = aan = an-1 + d

Page 26: רקורסיה מבעד למשקפי הפרדיגמה

דוגמא – עצרת !, רקורסיה חשבונית, דוגמא – עצרת !, רקורסיה חשבונית, מעבר לפסקל )פרוצדורה(מעבר לפסקל )פרוצדורה(

procedure Factorial_p( N: integer; var F:integer);

var F1 : integer;begin if N = 0 then F := 1 else if N = 1 then F := 1 else begin Factorial_p( N-1, F1); F := F1 * N; end;end;

Page 27: רקורסיה מבעד למשקפי הפרדיגמה

דוגמא – עצרת !, רקורסיה חשבונית, דוגמא – עצרת !, רקורסיה חשבונית, מעבר לפסקל )פונקציה(מעבר לפסקל )פונקציה(

function Factorial_f( N: integer):

integer;begin if N = 0 then Factorial_f := 1 else if N = 1 then Factorial_f := 1 else Factorial_f :=

Factorial_f(N-1) * N;end;

Page 28: רקורסיה מבעד למשקפי הפרדיגמה

דוגמא – סידרת פיבונאצי, רקורסיה דוגמא – סידרת פיבונאצי, רקורסיה חשבונית, מעבר לפסקל )פרוצדורה(חשבונית, מעבר לפסקל )פרוצדורה(procedure Fibonaci_p( N: integer;

var F:integer);var F1, F2 : integer;begin if N = 1 then F := 0 else if N = 2 then F := 1 else begin Fibonaci_p( N-1, F1); Fibonaci_p( N-2, F2); F := F1 + F2; end;end;

Page 29: רקורסיה מבעד למשקפי הפרדיגמה

דוגמא – סידרת פיבונאצי, רקורסיה דוגמא – סידרת פיבונאצי, רקורסיה חשבונית, מעבר לפסקל )פונקציה(חשבונית, מעבר לפסקל )פונקציה(

function Fibonaci_f( N: integer):

integer;begin if N = 1 then Fibonaci_f := 0 else if N = 2 then Fibonaci_f := 1 else Fibonaci_f := Fibonaci_f(N-1) + Fibonaci_f(N-2);end;

Page 30: רקורסיה מבעד למשקפי הפרדיגמה

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

function Natural_Num( N: integer):

boolean;begin if N > 0 then if N = 1 then Natural_Num := true else Natural_Num :=

Natural_Num(N-1) else Natural_Num := false;end;

Page 31: רקורסיה מבעד למשקפי הפרדיגמה

איבר נמצא ברשימה אם:

הוא האיבר הראשון ברשימה •או

הוא נמצא בהמשך הרשימה•

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

Page 32: רקורסיה מבעד למשקפי הפרדיגמה

דוגמא – נמצא ברשימה דוגמא – נמצא ברשימה רקורסיה ברשימות - פרולוגרקורסיה ברשימות - פרולוג

(X, L% נמצא_ברשימה )

(.X, [ X | _ ]נמצא_ברשימה )

( :-X, [ _ | Z ]נמצא_ברשימה )(.X, Zנמצא_ברשימה )

Page 33: רקורסיה מבעד למשקפי הפרדיגמה

דוגמא – נמצא ברשימה דוגמא – נמצא ברשימה רקורסיה מערך - בפסקלרקורסיה מערך - בפסקל

function In_List(A:arr_type;N:integer; P: integer;

X: integer): boolean;begin if P <= N then begin

if X = A[P] then In_List := true else In_List := In_List(A,P+1,X);

end else In_List := false;end;

Page 34: רקורסיה מבעד למשקפי הפרדיגמה

דוגמא – נמצא ברשימה דוגמא – נמצא ברשימה רקורסיה ברשימות - פסקלרקורסיה ברשימות - פסקל

function In_List( L: list_type; P: list_pos;

X: list_info_type): boolean;var Y:list_info_type;begin if not list_is_empty(L)then begin list_retrieve(L,P,Y); if X = Y then In_List := true else In_List := In_list(L,

list_next(L,P),X); end

else In_List := false;end;

Page 35: רקורסיה מבעד למשקפי הפרדיגמה

דוגמא – קטן ברשימה דוגמא – קטן ברשימה הגדרה רקורסיביתהגדרה רקורסיבית

הקטן ברשימה הוא:

אוהאיבר היחיד ברשימה •

ביןהאיבר הקטן •

לביןהראשון ברשימה

הקטן בין יתר אברי הרשימה

Page 36: רקורסיה מבעד למשקפי הפרדיגמה

דוגמא – קטן ברשימה דוגמא – קטן ברשימה רקורסיה ברשימות - פרולוגרקורסיה ברשימות - פרולוג

% קטן_ברשימה )_קטן, _רשימה(

(.X, [ X ]קטן_ברשימה )

( :-X, [ X | Z ]קטן_ברשימה ) (,Y, Z קטן_ברשימה )

X < Y.

( :-Y, [ X | Z ]קטן_ברשימה ) (,Y, Z קטן_ברשימה )

Y < X.

הנחה: הרשימה לא ריקה

Page 37: רקורסיה מבעד למשקפי הפרדיגמה

דוגמא – קטן ברשימה רקורסיה דוגמא – קטן ברשימה רקורסיה במערך - פסקלבמערך - פסקל

function List_Small( A:arr_type;

N,P:integer):integer;var Y:integer;begin if P =N then List_Small:= A[N] else begin

Y := List_Small(A,N,P+1); if X < Y then List_Small:= X

else List_Small:= Y;

end;end;

Page 38: רקורסיה מבעד למשקפי הפרדיגמה

דוגמא – קטן ברשימה דוגמא – קטן ברשימה רקורסיה ברשימות - פסקלרקורסיה ברשימות - פסקל

Page 39: רקורסיה מבעד למשקפי הפרדיגמה

function List_Small( L: list_type; P: list_pos): integer;

var X,Y : list_info_type;begin list_retrieve(L, P, X); if list_next(L, P) =list_end(L) then List_Small:= X else begin

Y := List_Small (L,list_next(L,P));

if X < Y then List_Small:= X

else List_Small:= Y;

end;end;

Page 40: רקורסיה מבעד למשקפי הפרדיגמה