Presentation is loading. Please wait.

Presentation is loading. Please wait.

11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול 7 22.11.2010.

Similar presentations


Presentation on theme: "11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול 7 22.11.2010."— Presentation transcript:

1 11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול 7 22.11.2010

2 2 מטרת התרגול רקורסיה 2 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel

3 דוגמא כתבו פונקציה רקורסיבית המקבל מספר שלם n ומחשבת את n!. דוגמא: בהינתן n=5 הפונקציה תחזיר 120. 3 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel

4 דוגמא - פתרון 4 int recFactorial(int n) { if(n <= 1) return 1; return n * recFactorial(n-1); } Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel

5 5 תרגיל 1 כתבו פונקציה רקורסיבית המקבלת מספר שלם ומדפיסה אותו הפוך. דוגמא: בהינתן המספר 123 הפונקציה הרקורסיבית תדפיס 321. Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel

6 6 דוגמא 1 - פתרון void foo(int n) { printf("%d", n % 10); if (n > 10) foo(n / 10); } Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel מה יקרה נבצע את ההדפסה לאחר הבדיקה ?

7 7 תרגיל 2 כתבו תוכנית הקולטת עד 20 ערכים שלמים (1- מציין סוף קלט) למערך ומוצאת את הערך המקסימאלי. לשם כך, ניתן לפרק את הבעיה לשתי בעיות קטנות יותר 1)כתבו פונקציה רקורסיבית שקולטת את המערך 2)כתבו פונקציה רקורסיבית שמחזירה את הערך המקסימאלי 7 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel

8 88 תרגיל 2 - פתרון void GetArray(int arr[], int i) { if (i > MAX_LEN - 1) { arr[i] = -1; return; } scanf("%d", &a[i]); if (arr[i] != -1) GetArray(arr, i + 1); } int Max(int a[], int i) { int max; if (a[i] == -1) return a[0]; max = Max(a, i + 1); return (a[i] > max ? a[i] : max); }

9 9 תרגיל 3 9 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel כתוב פונקציה רקורסיבית אשר מקבלת מחרוזת s, תו ch, ומספר שלם n. הפונקציה תחפש את המופע ה- n-י של ch במחרוזת s ותחזיר את האינדקס שלו. דוגמא: בהינתן המחרוזת “abbc”, התו b, והשלם 2 (עבור n) הפונקציה תחזיר 2. התו ‘b’ מופיע בפעם השנייה במחרוזת s באינדקס 2 במחרוזת.

10 10 תרגיל 3 - פתרון Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel int FindNOccurence(char s[], char ch, int n, int index) { if (n == 0) return index -1; if (s[index] == '\0') return -1; if (s[index] == ch) return FindNOccurence (s, ch, n – 1, index + 1); return FindNOccurence(s, ch, n, index + 1); {

11 תרגיל 4 כתבו פונקציה רקורסיבית המקבלת מערך של מספרים שלמים ןמחזירה 1 אם ניתן לחלק את הערכים הנתונים במערך לשני שקים כך שבכל שק סכום הערכים שווה ו- 0 אחרת. –ניתן להוסיף לפונקציה פרמטרים במידת הצורך 11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel

12 תרגיל 4 - פתרון int divideWeights(int values[], int index, int iBag1, int iBag2) { if ( (index == SIZE) && (iBag1 == iBag2) ) return 1; else if ( index == SIZE ) return 0; return ( divideWeights(values, index+1, iBag1+values[index], iBag2) || divideWeights(values, index+1, iBag1, iBag2+values[index]) ); } 12 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel

13 תרגיל בית כתוב פונקציה רקורסיבית המקבלת מערך של מספרים שלמים, אינדקס למערך זה (יקבל את הערך 0 בקריאה הראשונית) ושני מספרים שלמים המכילים אפסים בקריאה הראשונית. אם ניתן לחלק את הערכים לשני שקים כך שבכל שק סכום הערכים זהה, הפונקציה תדפיס את הערכים בכל שק. 13 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel


Download ppt "11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול 7 22.11.2010."

Similar presentations


Ads by Google