Professional Documents
Culture Documents
מצגת 4 - רקורסיה
מצגת 4 - רקורסיה
מצגת 4 - רקורסיה
מצגת – 4רקורסיה
הגדרת רקורסיה
בעיית העצרת
טבלת מעקב
סדרת פיבונאצ'י
חישוב סכום ספרות
בדיקה האם פלינדרום
חישוב GCD
רקורסיה במבני נתונים במחסנית
מגדלי הנוי
1
נכתב ע"י ניצן דולינסקי Ⓒ
אין לשכפל /להעתיק ללא אישור
א .הגדרת רקורסיה
רקורסיה ,בתחום התכנות ,היא טכניקה ידועה שמהותה – פעולה הקוראת
לעצמה.
יש לכך שימושים מגוונים בכמה תחומים של התכנות.
פונקציה רקורסיבית:
מה התקלה?
2
נכתב ע"י ניצן דולינסקי Ⓒ
אין לשכפל /להעתיק ללא אישור
הפתרון:
הוספת שלב בדיקה עבור מקרה הבסיסי שהוא כל כך פשוט ,שניתן להחזיר את
התשובה באופן מיידי.
אחרת ,בצע קריאה רקורסיבית למקרה מורכב קטן יותר
(כלומר ,מקרה שהוא צעד לעבר מקרה הבסיס – שהוא מקרה מורכב).
else
{
)מקרה מורכב קטן יותר(func
}
}
דוגמה:
else
{
;)Console.WriteLine("Printing..." + n
;)printMe(n - 1
;return
}
}
3
נכתב ע"י ניצן דולינסקי Ⓒ
אין לשכפל /להעתיק ללא אישור
.n ומחזירה ערךn דוגמה לפונקציה שמקבלת
else
{
return 1+ ReturnN(n - 1);
}
}
4
Ⓒ נכתב ע"י ניצן דולינסקי
להעתיק ללא אישור/ אין לשכפל
ב .טבלת מעקב
5
נכתב ע"י ניצן דולינסקי Ⓒ
אין לשכפל /להעתיק ללא אישור
שלב א'
שלב ב'
6
נכתב ע"י ניצן דולינסקי Ⓒ
אין לשכפל /להעתיק ללא אישור
תרגיל 1
7
נכתב ע"י ניצן דולינסקי Ⓒ
אין לשכפל /להעתיק ללא אישור
בעיית סכום מספרים .ג
SumN(1) = 1
SumN(2) = 1 + 2 = 3
SumN (3) = 1 + 2 + 3 = 6
…
SumN (n) = 1 + 2 + 3 + … + (n-1) + n
פתרון לא רקורסיבי
return sum;
}
8
Ⓒ נכתב ע"י ניצן דולינסקי
להעתיק ללא אישור/ אין לשכפל
פתרון רקורסיבי
else
return n + Sum(n - 1);
}
9
Ⓒ נכתב ע"י ניצן דולינסקי
להעתיק ללא אישור/ אין לשכפל
טבלת מעקב שלב א'
תרגיל 2
11
נכתב ע"י ניצן דולינסקי Ⓒ
אין לשכפל /להעתיק ללא אישור
בעיית העצרת .ד
factorial(1) = 1
factorial(2) = 1*2 = 2
factorial(3) = 1*2*3 = 6
factorial(4) = 1 * 2 * 3 * 4 = 24
factorial(5) = 1 * 2 * 3 * 4 * 5 = 120
…
factorial(n) = 1 * 2 * 3 * … * (n-1) * n
פתרון לא רקורסיבי
return fact;
}
11
Ⓒ נכתב ע"י ניצן דולינסקי
להעתיק ללא אישור/ אין לשכפל
פתרון רקורסיבי
12
Ⓒ נכתב ע"י ניצן דולינסקי
להעתיק ללא אישור/ אין לשכפל
בעיית העצרת.ה
factorial(1) = 1
factorial(2) = 1*2 = 2
factorial(3) = 1*2*3 = 6
factorial(4) = 1 * 2 * 3 * 4 = 24
factorial(5) = 1 * 2 * 3 * 4 * 5 = 120
…
factorial(n) = 1 * 2 * 3 * … * (n-1) * n
פתרון לא רקורסיבי
return fact;
}
13
Ⓒ נכתב ע"י ניצן דולינסקי
להעתיק ללא אישור/ אין לשכפל
פתרון רקורסיבי
14
Ⓒ נכתב ע"י ניצן דולינסקי
להעתיק ללא אישור/ אין לשכפל
טבלת מעקב שלב א'
תרגיל 3
15
נכתב ע"י ניצן דולינסקי Ⓒ
אין לשכפל /להעתיק ללא אישור
תרגיל 1
תרגיל 2
.2רשום טבלת מעקב וערך מוחזר עבור קריאה לפעולה עם פרמטר .7
.3רשום טבלת מעקב וערך מוחזר עבור קריאה לפעולה עם פרמטר .11
16
נכתב ע"י ניצן דולינסקי Ⓒ
אין לשכפל /להעתיק ללא אישור
מספר פיבונאצ'י .ו
fibonacci(0) = 0
fibonacci (1) = 1
fibonacci (2) = fibonacci (1) + fibonacci (0) = 1+0 = 1
fibonacci (3) = fibonacci (2) + fibonacci (1) = 1+1 = 2
fibonacci (4) = fibonacci (3) + fibonacci (2) = 2+1 = 3
fibonacci (5) = fibonacci (4) + fibonacci (3) = 3+2 =5
fibonacci (6) = fibonacci (5) + fibonacci (4) = 5+3 = 8
fibonacci (7) = fibonacci (6) + fibonacci (5) = 8+5 = 13
…
fibonacci (n) = fibonacci (n-1) + fibonacci (n-2)
פתרון לא רקורסיבי
if (n < 2)
return n;
return result;
}
Console.ReadKey();
}
17
Ⓒ נכתב ע"י ניצן דולינסקי
להעתיק ללא אישור/ אין לשכפל
פתרון רקורסיבי
;)(Console.ReadKey
}
תרגיל 3
.1רשום טבלת מעקב וערך מוחזר עבור קריאה לפעולה Fibonacciעם פרמטר .7
.2רשום טבלת מעקב וערך מוחזר עבור קריאה לפעולה עם פרמטר .11
18
נכתב ע"י ניצן דולינסקי Ⓒ
אין לשכפל /להעתיק ללא אישור
חישוב סכום ספרות ז.
בהינתן מספר שלם ,המשימה היא למצוא את סכום ספרותיו של המספר.
פָּ ִלינְ ְדרֹום הוא מחרוזת שקריאתה משמאל לימין ומימין לשמאל מחזירה
מחרוזת זהה ,למשל ,המחרוזות "."MADAMIMADAM" ,"123321
בהינתן מחרוזת ,המשימה היא למצוא האם המחרוזת פלינדרום.
19
נכתב ע"י ניצן דולינסקי Ⓒ
אין לשכפל /להעתיק ללא אישור
חישוב GCD י.
בהינתן שני מספרים שלמים ,המשימה היא למצוא את Greatest (GCD
- )common divisorהמחלק הגדול ביותר של מספרים הנתונים.
לדוגמה GCDשל 21ו 28-הוא 4ו GCD -של 98ו 56-הוא :14
// a is greater
)if (a > b
;)return GCD(a - b, b
;)return GCD(a, b - a
}
תרגול
21
נכתב ע"י ניצן דולינסקי Ⓒ
אין לשכפל /להעתיק ללא אישור
מגדלי הנוי.יא
. הרעיון הוא להשתמש בצומת העזר כדי להגיע ליעד באמצעות רקורסיה
: פתרון רקורסיבי
.C באמצעות,'B'-' לA'-' מN-1' העבר דיסקים שלo
.'C'-' לA'- העבר את הדיסק האחרון מo
.A באמצעות,'C'-' לB'-' מN-1' העבר דיסקים שלo
: פתרון
21
Ⓒ נכתב ע"י ניצן דולינסקי
להעתיק ללא אישור/ אין לשכפל
יב .רקורסיה במבני נתונים במחסנית
נתונה פונקציה :What
בהינתן המחסניות:
22
נכתב ע"י ניצן דולינסקי Ⓒ
אין לשכפל /להעתיק ללא אישור