תרגילים

  1. כתבו פעולה רקורסיבית המקבלת מספר שלם חיובי גדול מאפס, ומדפיסה שורת של כוכביות באורך המספר שהתקבל
  2. כתבו פעולה רקורסיבית המקבלת שני מספרים שלמים, ומחזירה את שארית החלוקה של אחד בשני בעזרת פעולת חיסור בלבד (העזר ברעיון של דוגמא 3).
  3. כתבו פעולה רקורסיבית המקבלת מספר שלם, ומחזירה את כמות הספרות האי זוגיות שיש בו (הרחבה של דוגמא 4).
  4. כתבו פעולה רקורסיבית המקבלת מספר שלם, ומחזירה את סכום ספרותיו (הרחבה של דוגמא 2).
  5. כתבו פעולה רקורסיבית המקבלת מספר שלם, ומחזירה את סכום הספרות הזוגיות שיש בו (הרחבה של התרגיל הקודם).
  6. כתבו פעולה רקורסיבית המקבלת מספר שלם וספרה, ומחזירה את כמות הפעמים שהספרה נמצאת במספר.
  7. כתבו פעולה רקורסיבית המקבלת מספר שלם אי זוגי, ומחזירה את סכום הטור החשבוני מ-1 ועד המספר בקפיצות של 2.(סכום המספרים האי זוגיים מ-1 עד המספר שנמסר כפרמטר)

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

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

הסדרה מתחילה כך:

0 1 1 2 3 5 8 13 21 34 ….

כך שעבור n = 6, הפעולה תחזיר את המספר 5, מכיוון שהמספר 5 נמצא במיקום השישי בסדרה.

פתרון שאלה מספר 1

עוצרים ב-1:

public static void Star(int n)

{

        if( n==1)

                Console.Wrile(“*”);

        else

        {

        Console.Wrile(“*”);

        Star(n-1);

        }

        

}

עוצרים ב-0:

public static void Star(int n)

{

        if( n==0)

                return;

        Console.Wrile(“*”);

        Star(n-1);

        

}

פתרון שאלה מספר 2 בשדפת c#

תנאי עצירה: המחולק קטן מהמחלק.

public static int Modulo (int n, int x)

{

        if( n<x)

                return n;

        return Modulo (n-x , x);

}

פתרון שאלה מספר 3 בשפת c#

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

כלי עזר:

n%10 → מביא לנו את ספרת האחדות

n/10 → מסיר את ספרת האחדות

odd = אי זוגי

public static int CountOdd(int n)

{

        if(n==0)

                return 0;

        int unit = n%10;

        

        if(unit%2==1) // Odd

                return  1+CountOdd(n/10);

        return  CountOdd(n/10);

}

דוגמה לטבלת מעקב:

פתרון לשאלה מספר 4

 public static int SumDigits (int n)

{

        if(n==0)

                return 0;

        int unit = n%10;

        return unit+ SumDigits (n/10);

}

פתרון לשאלה מספר 5

Even = זוגי

 public static int SumDigitsEven (int n)

{

        if(n==0)

                return 0;

        int unit = n%10;

        if (unit%2==0)

                return unit+ SumDigits (n/10);

        return  SumDigits (n/10);

}

פתרון לשאלה מספר 6

public static int CountDigit(int n, int d)

{

        if(n==0)

                return 0;

        int unit = n%10;

        if(unit == digit)

                return 1+CountDigit( n/10,  d);

        return CountDigit( n/10,  d);

}

פתרון שאלה מספר 7

public static int SumSeriesEven (int n)

{

        if(n==1)

                return 1;

        return n+SumSeriesEven(n-2);

}

פתרון שאלה מספר 8

public static int Pibo (int n)

{

        if(n==0)

                return 0;

        if(n==1)

                return 1;

return Pibo(n-1) + Pibo(n-2);

}

דוגמא 1: חישוב מכפלת שני מספרים

public static int Mult (int x, int y)

{

    if (y == 1)

          return x;

    return Mult (x, y - 1) + x;

}

טבלת מעקב

דוגמא 2: כמה ספרות יש במספר

public static int DigitNum (int n)

{

    if (n < 10)

         return 1;

    return DigitNum (n / 10) + 1;

}

דוגמא 3: חישוב מנה בחלוקת שני מספרים בשימוש בפעולות חיבור וחסור בלבד

public static int Div (int a, int b)

{

    if (a == b)

         return 1;

    else

    {

          if (a < b)

            return 0;

  return Div (a - b , b) + 1;

    }

}