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

Slides:



Advertisements
Similar presentations
ממיבחניםC שאלות ++.
Advertisements

מבוא למדעי המחשב לתעשייה וניהול
האוניברסיטה העברית בירושלים
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב'
Recitation #9. Q1 גרף מכוון מורכב מקבוצה של צמתים (nodes) ומקשתות מכוונות (arcs) המחברות ביניהם. כל קשת מכוונת יוצאת מצומת אחד ונכנסת לצומת אחר. ( בגרפים.
מבוא למדעי המחשב תרגול 2 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
תכנות תרגול 9 שבוע : הקשר בין מערכים למצביעים נרצה לעמוד על הקשר בין מערך למצביע מאחר ומערכים הם הכללה של משתנים הרי שברור שלמערך ולכל אחד מאיבריו.
תכנות תרגול 6 שבוע : חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה n n.
תרגול 5 רקורסיות. רקורסיה קריאה של פונקציה לעצמה –באופן ישיר או באופן עקיף היתרון : תכנות של דברים מסובכים נעשה ברור ונוח יותר, מכיוון שזו למעשה צורת.
תכנות תרגול 4 שבוע : לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
Input Output Examples. import java.io.*; class Greetings { public static void main (String[] args) { try { DataInputStream in = new DataInputStream(System.in);
תכנות תרגול 2 שבוע : שבוע שעבר כתבו תוכנית המגדירה שלושה משתנים מאתחלת אותם ל 1 2 ו 3 ומדפיסה את המכפלה שלהם את ההפרש שלהם ואת הסכום שלהם.
מבוא לשפת C חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל.
11 Introduction to Programming in C תרגול
מבוא למדעי המחשב תרגול 8 - מחרוזות שעת קבלה : יום שני 11:00-12:00 דוא " ל :
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
מבוא למדעי המחשב תרגול 4 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
תכנות תרגול 6 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
תכנות תרגול 10 שבוע : הקשר בין מערכים למצביעים נרצה לעמוד על הקשר בין מערך למצביע מאחר ומערכים הם הכללה של משתנים הרי שברור שלמערך ולכל אחד מאיבריו.
מבוא כללי למדעי המחשב תרגול 3. לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
נוצר ע " י ד " ר ארקדי שטיינבוק Visual Basic for Application VBA כדוגמה VBA ב - WORD.
מבוא למדעי המחשב תרגול 6 - מערכים שעת קבלה : יום שני 11:00-12:00 דוא " ל :
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים 1 הפניות.
תכנות תרגול 5 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מבוא למדעי המחשב, סמסטר א ', תשע " א תרגול מס ' 1 נושאים  הכרת הקורס  פסאודו - קוד / אלגוריתם 1.
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
מבוא מורחב למדעי המחשב בשפת Scheme תרגול 10. אג'נדה שאלות מבחינות חזרה על מימוש stream אפשרי 2.
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
תכנות תרגול 12 שבוע : מבנים מטרת המבנים היא לאפשר למתכנת להגדיר טיפוסי משתנים חדשים אשר מתאימים ספציפית לבעיה שאותה התוכנית פותרת. מטרת המבנים.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
LAB 10.
תרגול 13 חזרה 1. Exam example 8 public class Stam { private char x; public Stam() { this.x = '*'; } public Stam (char c) { this.x = c; } public Stam getStam()
מבוא למדעי המחשב לתעשייה וניהול הרצאה 7. סברוטינות subroutines.
1 מבוא למחשב שפת C תרגילי חזרה. 2 תרגיל 1 : מחשבון קלט : תרגיל חשבוני המורכב ממספרים שלמים עם פעולות חשבוניות ביניהם. התרגיל מסתיים ב =. אפשריים רווחים.
מבוא למדעי המחשב הרצאה 9: תכנות רקורסיבי 2 1. חישוב עצרת: רקורסיית זנב public static int fact (int n){ return factacc(n,1); } public static int factacc.
Practice session 6 Sequence Operations Partial Evaluation Lazy Lists.
Practice session 5 טיפוסים מורכבים Abstract Data Types הכנה לעבודה 3.
1 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים פולימורפיזם מתקדם ממשקים בג ' אווה 1.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 12. ספריות.
1 מבוא למדעי המחשב הרצאה 5: פונקציות. 2 מבוא לפונקציות חלוקה של אלגוריתם לתת משימות: משימה - פונקציה: דוגמאות מציאת המקסימלי מבין שני איברים האינדקס של.
1 תרגול 11: Design Patterns ומחלקות פנימיות אסף זריצקי ומתי שמרת 1 תוכנה 1.
1 נתבונן בפונקציה הבאה public static int min(int[] a,int n) { int min = a[0]; for (int i = 1; (i < n ) && (i < a.length) ; i++) if (min > a[i]) min = a[i];
Int fact (int n) { If (n == 0) return 1; else return n * fact (n – 1); } 5 void main () { Int Sum; : Sum = fact (5); : } Factorial Program Using Recursion.
Programming Pointers. נדגים היום בעזרת מצביעים העברת משתנים לפונקציה שמשנה אותם  פונקציה שמקבלת מצביעים לסמן תא בזיכרון  פונקציה שמחזירה מצביע מערך.
מחרוזות – הטיפוס String
האוניברסיטה העברית בירושלים
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
Programming Arrays.
Tirgul 12 Trees 1.
הרצאה 10 פונקציות עם מספר משתנה של פרמטרים
מבוא למדעי המחשב סיבוכיות.
תכנות מונחה עצמים.
שיעור חמישי: מערכים ומחרוזות
Exams questions examples
תירגול 14: מבני נתונים דינאמיים
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
לולאות קרן כליף.
Static and enum קרן כליף.
קורס תכנות שיעור 11: הסוף.
Computer Programming Summer 2017
מבוא כללי למדעי המחשב תרגול 4
תרגול 8 תחומי הכרה פונקציות
Introduction to Programming in C
נושאים מחרוזות מיון (מיון בועות) רקורסיה
מבוא לתכנות ב- Java תרגול 10 - רשימות מקושרות.
פולימורפיזם מתקדם ממשקים בC# עריכה ועיצוב: קרן הרדי
Presentation transcript:

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

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

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

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

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

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

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

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

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

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

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

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

הוראת המדעים האוניברסיטה העברית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 זימון הפעולה 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 אתגר כתבו פעולה פנימית רקורסיבית, אשר תחשב את מספר הספרות של התכונה num, ולא תשתמש בפעולת עזר סטטית.

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

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

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

הוראת המדעים האוניברסיטה העברית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 פעולה פנימית כתבו מחלקה MyString. לעצמים מטיפוס מחלקה זו ישנה פעולת ממשק isPalindrom() המאפשרת להבדוק האם המחרוזת היא פלינדרום. הגדירו את המחלקה, כתבו ייצוג, ממשו פעולה בונה ופעולה isPalindrom().

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

הוראת המדעים האוניברסיטה העברית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 אתגר ממשו את isPalindrom() כפעולה פנימית ללא פעולת עזר.

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

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

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

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

הוראת המדעים האוניברסיטה העברית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 סיכום דוגמה 4 בעבודה על מערכים צמצום הטווח נעשה באמצעות אינדקסים.

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

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

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

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