רקורסיה

רמה קלה

תרגיל 1

יש לכתוב פונקציה רקורסיבית אשר תשרטט משולש מכוכביות. הפונקציה תקבל את גודל המשולש כפרמטר ובכל קריאה תשרטט שורה מתוך משולש. דוגמה למשולש בגודל 4:



*

**

***

****

תרגיל 2

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

תרגיל 3

כתוב פונקציה רקורסיבית המקבלת מערך ומחזירה את האיבר הגדול ביותר בו.

תרגיל 4

כתוב פונקציה רקורסיבית המקבלת מספר n, ומחזירה את המספר ה-n-י בסידרת פיבונצי.

תרגיל 5

כתוב פונקציה רקורסיבית המקבלת מערך ומחזירה 1 אם כל איברי המערך חיוביים או 0 אחרת.

תרגיל 6

כתוב פונקציה רקורסיבית המקבלת מערך ומדפיסה את כל איבריו מהסוף להתחלה.

תרגיל 7

כתוב פונקציה רקורסיבית המקבלת מספר plot:\[n\] ומדפיסה plot:\[n\] פעמים את האות plot:\[a\] ולאחריה plot:\[n\] פעמים את האות plot:\[b\].



תרגיל 8

הבט בקוד הבא, והסבר מה משמעות הערך שהפונקציה מחזירה בתום הקריאה לה:

int what(int a[], int n)
{
        if (n == 1) return abs(a[0]);
        return max(what(a, n/2), what(&a[n/2], n-n/2));
}

רמה בינונית

תרגיל 1

הספרייה הסטנדרטית string.h  מספקת פונקציות לטיפול במחרוזות.

יש לממש בעזרת רקורסיה את הפונקציות הבאות המקבילות לפונקציות מהספרייה :srting.h

unsigned strlen_rec (char *str);

הפונקציה מחזירה את מספר התווים במחרוזת.

char* strcpy_rec(char *str1, char *str2);

הפונקציה מעתיקה את המחרוזת str2 למחרוזת str1 ומחזירה את כתובת המחרוזת str1

int strcmp_rec(char *str1, char *str2);

הפונקציה משווה בין המחרוזת str1 למחרוזת str2 ומחזירה:

0 אם המחרוזות זהות, או  str1[i]-str2[i]כאשר i האינדקס של התו השונה הראשון.

char* strcat_rec(char *str1, char *str2);

הפונקציה משרשרת את המחרוזת str2 לסוף המחרוזת str1 ומחזירה את כתובת המחרוזת str1.

תרגיל 2

כתוב פונקציה רקורסיבית המקבלת מערך, את גודלו, ומצביע אל משתנה double. הפונקציה תשים בתוך המצביע את הממוצע של אברי המערך.

תרגיל 3

כתוב פונקציה רקורסיבית המקבלת מחרוזת, ומדפיסה על המסך את כל התווים במחרוזת שערך

ה-ASCII שלהם קטן מזה של האות האחרונה במחרוזת.

תרגיל 4

כתוב פונקציה המקבלת מערך ואת גודלו ומחזירה את האיבר במערך שערכו המוחלט הוא הגדול ביותר מבין כל אברי המערך.

תרגיל 5

כתוב פונקציה רקורסיבית, אשר תקבל מספר טבעי, תבדוק ותחזיר 1 אם הוא מספר ראשוני, ואת 0 אחרת.

תרגיל 6

נתונה הסידרה הבאה:  0,1,1,2,5,29,…. בסדרה זו האיבר הראשון 0, האיבר השני 1, וכל איבר אחר בסדרה הוא סכום ריבועי שני האיברים שלפניו.

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

רמה קשה

תרגיל 1

כתוב פונקציה רקורסיבית המקבלת מחרוזת ומדפיסה את כל האותיות הנמצאות בסדר הלקסיקוגרפי בין האות הראשונה לאות האחרונה במחרוזת (לא כולל האותיות הקיצוניות עצמן). סדר ההדפסה אינו משנה.

דוגמא: עבור המחרוזת cfgrti  תודפסנה האותיות gf.

דרישות:

  • אסור להשתמש בלולאות או בפונקציות עזר המכילות לולאות (הפונקציות הסטנדרטיות לטיפול במחרוזות, כגון strlen(), מבוססות על לולאות!).
  • מותר לבצע מעבר רקורסיבי אחד בלבד על המחרוזת.
  • אורך המחרוזת אינו ידוע מראש.
  • במקרה והאות הראשונה אינה נמוכה לקסיקוגרפית מהאות האחרונה, לא יודפס כלום.
  • מותר לפונקציה לשנות את המחרוזת, בתנאי שבסיום הפעולה המחרוזת חוזרת לקדמותה.



תרגיל 2

a הוא מערך שלמים באורך n. ידוע ש- n  אי-זוגי.

א. השלם את הקוד הרקורסיבי הבא כך שידפיס את אברי a בסדר הבא משמאל לימין:

a[0],  a[n-1],  a[1],  a[n-2],  ...,  a[(n-1)/2]

    בכל מקום חסר יש לכתוב פסוק פשוט (simple statement) אחד בלבד.


void extreme_to_middle(int a[], int n)
{
     if (n == __________ )
{

           ___________________________________________

           return;
     }

     _________________________________________________

_________________________________________________


     return;
}



     ב. השלם את הקוד הרקורסיבי הבא כך שידפיס את אברי a בסדר הבא משמאל לימין:

a[(n-1)/2],  a[(n-1)/2 - 1],  a[(n-1)/2 + 1],  ...,  a[0],  a[n-1]


void middle_to_extreme(int a[], int n)
{
     if (n == __________ )
{

           ___________________________________________

           return;
     }

     _________________________________________________

_________________________________________________


     return;
}

תרגיל 3

כתוב פונקציה רקורסיבית, אשר מקבלת מספר טבעי N, ותדפיס את N מספרים הראשונים של הסדרה הבאה: 1, 2, 4, 7, 11, 16, 22, ….



מאת: שמואל

שאלה

אפשר תשובה לתרגיל 11
מאת: C

פתרון שאלה 1

int main()
{
...
k = --I/j;
// 7 = 31/4;
q=&j;
//(כתובת J)4
{
...
I=j - ++(*q);
//5 = 10 - 5;

//printf(" I = 5 , j= 10)
}
//printf("I=31,j=5)
מאת: מהנדס מכרמיאל

עזרה

יעזור מאוד אם היו תשובות
מאת: יגאל חכמון

סטודנט להנדסת חשמל

ספת c
מאת: טלי

יש מצב לעלות תשובות?
מאת: גל

תשובות לשאלות

שלום לכולם... יש מצב שאתם מעלים גם את התשובות לשאלות האלה?!
תודה רבה!
מאת: ירון

שאלה במערכים (לא מונים)

נתונים 2 מערכים:מערך a מכיל30 איברים מסוג שלמים.מערך b מכיל 10 אברים מסוג ממשיים. נתון כי במערך a מאוחסנים עשר שלשות של מספרים שלמים. המספר השלישי מכיל קוד פעולה...
מה זה קוד פעולה?
איך יוצרים אותו?
איך אומאים למערך אחר לבצע אותו?
מאת: הנדסאי

אפשר תשובות
מאת: לא ידוע

חשיבות גבוהה

רק 3 תרגילים???
ונורא מטופשים וקלים.
מאת: נטלי

מערך דו-מימדי

תוכנית מוכנה
מאת: נטלי

מערך דו-מימדי

איך לבנות משחק איקס עיגול ב - visual c איך לבנות מערך דו-מימדי. תשלחו בבקשה תוכנית מובנה.
מאת: kfirozeri

שאלותלשפתC

אהלן ניר אדר...

אני משמש בתוכנית הלימוד שלך לשפת C אבל בשאלות האלו חסר לי הפרונות לבדוק טת הפרונות דשלי... יש אפשרות לארגן את נספח של התשובות?
שיתוף:
| עוד