כתבו פעולה רקורסיבית המקבלת מערך של מספרים שלמים ומחזירה את סכום איבריו.
נניח וקיים המערך
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){ |
כתוב פעולה בוליאנית רקורסיבית המחזירה 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);
}
מעקב אחרי התכנית