כתבו פעולה רקורסיבית המקבלת מערך של מספרים שלמים ומחזירה את סכום איבריו.

נניח וקיים המערך

1,2,3

פתרון

public static int Sum (int [] arr)

{

        return Sum(arr, 0);

}

public static int Sum (int [] arr, int i)

{

        if( i== arr.Length)

                return 0;

        return arr[i] + Sum(arr, i+1);

}

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

public static int countPositive(int [] arr, int stop)

{

        return countPositive(arr, stop. 0);

}

public static int countPositive(int [] arr, int stop, int i)

{

        if( i>stop)

                return 0;

        if(arr[i] >0 )

                return 1 + countPositive(arr , stop, i+1);

        return countPositive(arr , stop, i+1);

}

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

public static int countLower(String str)

{

        return countLower(str, 0);

}

public static int countLower(String str, int i)

{

        if( i == str.length())

                return 0;

        

        char c = str.charAt(i);

        if( c>=’a’ && c<=’z’)

                return countLower(str,i+1)+1;

        return countLower(str,i+1);

}

כתוב פעולה רקורסיבית המקבלת מחרוזת ומחזירה מחרוזת חדשה. במחרוזת החדשה יופיע התו '*' אחרי כל שלושה תווים מן המחרוזת המקורית

public static String addStars (String str)

{

        return addStars(str,0);

}

public static String addStars (String str , int i)

{
        if( i == str.length())

                return "";

        if(i%3==2)

                return str.charAt(i)+"*"+addStars(str,i+1);

        return return str.charAt(i)+ addStars(str,i+1);

}

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

public static int find(int [] arr ,  int value)

{

        return find(arr, value, 0);

}

public static int find(int [] arr ,  int value, int i)

{

        if( i == arr.length)

                return -1;

        

        if( arr[i] == value)

                return i;

        return find(arr, value, i+1);

}

כתבו פעולה רקורסיבית הבודקת האם מערך נתון ממוין בסדר עולה

דוגמה:

1,2,3,4,5

שפת c#:

public static bool Sorted (int [] arr)

{

if(arr.Length==1)

        return true;

return Sorted(arr, 1);

}

public static bool Sorted (int [] arr, int i)

{

if(arr.Length==i)

        return true;

if(  arr[i] < arr[i-1] )

        return false;

return Sorted(arr,i+1);

}

פתרון בשפת java

public static boolean ascending (int arr[])

{

        return ascending (arr,1);

}

public static boolean ascending(int arr,  int i)

{

        if ( i >= arr.length)

                return true;

        if( arr[i-1] >= arr[i])

                return false;

        return ascending( arr,  i+1)

}

כתבו פעולה רקורסיבית הבודקת האם ערכי המערך מהווים סדרה חשבונית (כלומר קיים הפרש קבוע בין איברי המערך)

public static bool Series (int [] arr)

{

if(arr.Length==1 || arr.Length==2)

        return true;

return Sorted(arr, 2, arr[1]-arr[0]);

}

public static bool Series (int [] arr, int i, int d)

{

if(arr.Length==i)

        return true;

if(  arr[i] -arr[i-1] !=d)

        return false;

return Sorted(arr,i+1,d);

}

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

123

פתרון בשפת C#

public static int Min (int x)

{

if(x==0)

        return 0;

return Min(x/10 , x%10);

}

public static int Min (int x, int min)

{

if(x==0)

        return 9;

if(x%10 <min)

        min = x%10;

return Min (x/10, min);

}

כתוב פעולה המקבלת מערך של תווים (char), הפעולה תבצע היפוך של סדר התווים במערך. הראשון והאחרון יתחלפו וכך הלאה.

פתרון מלא בשפת C#

public static void Reverse(char  [] arr)

{

Reverse ( arr, 0, arr.Length-1);

}

public static void Reverse(char  [] arr, int i, int j)

{

        if( i<j)

        {

                //exchange

``                char temp = arr[i];

                arr[i] = arr[j];

                arr[j] = temp;

                Reverse(arr, i+1,j-1);

        }

        

}

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

public static boolean rishoni(int num, int parameter){

if(num<2)
return false;

if(parameter == num)
 
return true;

if(num%parameter==0)
 
return false;


return rishoni(num,parameter +1);
}

כתוב פעולה בוליאנית רקורסיבית המחזירה true אם אין במערך מספרים ראשוניים , אחרת , מחזירה הפעולה false. היעזר בפעולה שכתבת בשאלה 8 . הוסף פרמטרים לפי שיקול דעתך

public static boolean isPrimaryExist(int [] arr)

{

        return isPrimaryExist(arr, 0);

}

public static boolean isPrimaryExist(int [] arr, int i)

{

        if ( i == arr.length)

                return true;

        if( rishoni(arr[i]))

                return false;

        return isPrimaryExist(arr , i+1);

}

כתוב פעולה רקורסיבית המקבלת מחרוזת ומחזירה מחרוזת הפוכה (שסדר תוויה הפוך) למחרוזת שהתקבלה . הוסף פרמטרים לפי שיקול דעתך.

לדוגמא : אם המחרוזת בפרמטר היא abc , תחזיר הפעולה את המחרוזת cba

פתרון בשפת Java

public static String reverse (String str)

{

        return reverse(str,0);

}

public static String reverse (String str,int i)

{

        if(i==str.length())

                return "";

        return  reverse(str,i+1) + str.charAt(i) ;

        

}

כתוב פעולה רקורסיבית המקבלת שתי אותיות קטנות בתחום a - z , ומדפיסה את כל האותיות שבינהן

פתרון בשפת java

public static void printLetters(char start, char end)

{

        if( start > end)

                return;

        

        System.out.print(start+" ");

        start=(char)((int)start+1);

        printLetters(start,end);

}

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

לדוגמא:

עבור הקלט 54, 43255 השיטה תחזיר 3

פתרון בשפת java:

public static int digitsDiffer(int a, int b)
{
        if( a==0 && b==0)
                return 0;

        if ( a!=0 && b!=0)
                return digitsDiffer(a/10, b/10);

// a==0 || b==0
        return 1+digitsDiffer(a/10, b/10);                

}

מעקב אחרי התכנית