Presentation is loading. Please wait.

Presentation is loading. Please wait.

הוראת המדעים האוניברסיטה העברית1 רקורסיה. הוראת המדעים האוניברסיטה העברית2 חלק א: רקורסיה עם מספרים.

Similar presentations


Presentation on theme: "הוראת המדעים האוניברסיטה העברית1 רקורסיה. הוראת המדעים האוניברסיטה העברית2 חלק א: רקורסיה עם מספרים."— Presentation transcript:

1 הוראת המדעים האוניברסיטה העברית1 רקורסיה

2 הוראת המדעים האוניברסיטה העברית2 חלק א: רקורסיה עם מספרים

3 הוראת המדעים האוניברסיטה העברית3 דוגמה 1 - עצרת כתוב פעולה רקורסיבית המקבלת פרמטר n ומחשבת את ! n:

4 הוראת המדעים האוניברסיטה העברית4 פתרון public class NumUtil { public static int fact (int n) { if ( n == 0) return 1; else return fact(n-1) * n; } {

5 הוראת המדעים האוניברסיטה העברית5 זימון הפעולה public static void main(String[] args) { int azeret = NumUtil.fact(3); }

6 הוראת המדעים האוניברסיטה העברית6 סיכום דוגמה 1 תרגום ישיר משפות פרוצדורליות פעולה סטטית

7 הוראת המדעים האוניברסיטה העברית7 דוגמה 2 – סכום הספרות כתוב פעולה המקבלת כפרמטר מספר חיובי שלם ומחזירה את סכום ספרותיו.

8 הוראת המדעים האוניברסיטה העברית8 פתרון 1 public class NumUtil { public static int sumDigits1(int num) { if (num < 10) return num; else return (num % 10)+sumDigits1(num/10); } {

9 הוראת המדעים האוניברסיטה העברית9 פתרון 2 public static int sumDigits2(int num) { if (num == 0) return 0; else return(num % 10)+sumDigits2(num/10); }

10 הוראת המדעים האוניברסיטה העברית10 תנאי עצירה בפתרון 1 תנאי עצירה הוא : מספר בעל ספרה אחת. בפתרון 2 תנאי עצירה הוא: מספר בעל 0 ספרות.

11 הוראת המדעים האוניברסיטה העברית11 פעולה פנימית הגדירו מחלקה MyInteger. מחלקה זו מגדירה טיפוס מספר שלם עם תוספת: לעצמים הנוצרים מטיפוס מחלקה זו ישנה פעולת ממשק sumDigits() הסוכמת את הספרות של המספר. למשל אם ניצור עצם מהטיפוס הזה : MyInteger i = new MyInteger(123); ונפעיל עליו את הפעולה sumDigits(): int sum = i.sumDigits(); הערך שיוחזר בsum הוא 6. כתוב את ייצוג המחלקה, את הפעולה הבונה ואת הפעולה הפנימית sumDigits(). השתמש ברקורסיה.

12 הוראת המדעים האוניברסיטה העברית12 פתרון

13 הוראת המדעים האוניברסיטה העברית13 פתרון public class MyInteger { private int num; public MyInteger(int num){ this.num = num; } public int sumDigits(){ return psumDigits(this.num); } private static int psumDigits(int num){ if (num == 0) return 0; else return(num % 10) + psumDigits(num/10); }

14 הוראת המדעים האוניברסיטה העברית14 זימון הפעולה public static void main(String[] args){ MyInteger i1 = new MyInteger(135879); int sum1 = i1.sumDigits(); MyInteger i2 = new MyInteger(74583); int sum2 = i2.sumDigits(); }

15 הוראת המדעים האוניברסיטה העברית15 אתגר כתבו פעולה פנימית רקורסיבית, אשר תחשב את מספר הספרות של התכונה num, ולא תשתמש בפעולת עזר סטטית.

16 הוראת המדעים האוניברסיטה העברית16 סיכום דוגמה 2 ניתן לכתוב אותה פעולה עם תנאי עצירה שונים. כאשר רוצים להוסיף פעולות ממשק לעתים מגדירים טיפוס חדש באמצעות הרכבה. כאשר כותבים פעולה פנימית רקורסיבית, לעתים קרובות כותבים פעולת עזר פרטית סטטית.

17 הוראת המדעים האוניברסיטה העברית17 חלק ב: רקורסיה עם מחרוזות כתוב פעולה המקבלת מחרוזת ומחזירה ' אמת' אם המחרוזת היא פלינדרום ו'שקר' אחרת.

18 הוראת המדעים האוניברסיטה העברית18 API למשל קיימת פעולה היוצרת תת מחרות: public String substring(int beginIndex, int endIndex)String כאשר : beginIndex–האינדקס במחרוזת המקורית ממנו מתחילים לקחת את התת מחרוזת. endIndex –האינדקס הסופי של התת מחרוזת הנלקחת. תת המחרוזת הנלקחת תלקח עד endIndex-1 (כלומר, לא כולל האינדקס האחרון עצמו) ואורכה אם כך יהיה endIndex-beginIndex

19 הוראת המדעים האוניברסיטה העברית19 פתרון public static boolean isPalindrom(String str){ if( str.length() < 2) return true; else if ( str.charAt(0) != str.charAt(str.length() -1)) return false; else return isPalindrom(str.substring(1, str.length()-1)); }

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

21 הוראת המדעים האוניברסיטה העברית21 פתרון

22 הוראת המדעים האוניברסיטה העברית22 פתרון public class MyString { private String str; public MyString(String s){ this.str = s; } public boolean isPalindrom(){ return pisPalindrom.(this.str); } private static boolean pisPalindrom(String str){ if( str.length() < 2) return true; else if ( str.charAt(0) != str.charAt(str.length() -1)) return false; else return isPalindrom(str.substring(1, str.length()- 1)); }

23 הוראת המדעים האוניברסיטה העברית23 אתגר ממשו את isPalindrom() כפעולה פנימית ללא פעולת עזר.

24 הוראת המדעים האוניברסיטה העברית24 סיכום דוגמה 3 חזרה על המהלך שעשינו עם מספרים שלמים. חזרה על רקורסיה עם מחרוזות.

25 הוראת המדעים האוניברסיטה העברית25 חלק ג – רקורסיה עם מערכים

26 הוראת המדעים האוניברסיטה העברית26 דוגמה 4 – האיבר המקסימלי במערך כתבו אלגוריתם רקורסיבי המקבל כפרמטר מערך ומחזיר את ערכו של האיבר המקסימלי במערך. תזכורת: במערך צמצום הטווח במהלך הרקורסיה נעשה באמצעות אינדקסים.

27 הוראת המדעים האוניברסיטה העברית27 פתרון

28 הוראת המדעים האוניברסיטה העברית28 פתרון public static int max (int[] a, int leftIndex, int rightIndex){ if (leftIndex == rightIndex) return a[leftIndex]; else{ int mid = (leftIndex + rightIndex)/2; int maxLeft = max(a, leftIndex, mid); int maxRight = max(a, mid+1, rightIndex); return Math.max(maxleft, maxRight); }

29 הוראת המדעים האוניברסיטה העברית29 סיכום דוגמה 4 בעבודה על מערכים צמצום הטווח נעשה באמצעות אינדקסים.

30 הוראת המדעים האוניברסיטה העברית30 חלק ד – רקורסיה עם רשימה ברשימה המבנה הוא רקורסיבי: public class Node { T info; Node next; }

31 הוראת המדעים האוניברסיטה העברית31 פעולות רקורסיביות על חוליות public class Node { T info; Node next; public String toString(){ return (this.info+"->"+this.next); }

32 הוראת המדעים האוניברסיטה העברית32 זימון הפעולה public static void main(String[] args){ List lst = new List (); Node p = lst.getFirst(); for( int i =0; i < 5; i++) p = lst.insert(p, i); System.out.println(lst.getFirst()); }

33 הוראת המדעים האוניברסיטה העברית33 פעולת toString() של הרשימה public String toString(){ if(this.first == null) return “null”; return this.first.toString(); } public String toString(){ return “”+ this.first; } מימוש אלטרנטיבי תנאי עצירה מוסתר

34 הוראת המדעים האוניברסיטה העברית34 סיכום עבודה עם רשימות ברשימות המבנה הוא רקורסיבי. הרקורסיה מתבטאת בזימון פעולות על אובייקט פנימי מאותו טיפוס.


Download ppt "הוראת המדעים האוניברסיטה העברית1 רקורסיה. הוראת המדעים האוניברסיטה העברית2 חלק א: רקורסיה עם מספרים."

Similar presentations


Ads by Google