האם יש איבר זוגי במערך?
כתוב פונקציה bool EvenExists (int[] arr)
שמחזירה true
אם קיים איבר זוגי במערך, אחרת false
public static bool EvenExists(int[] arr, int i = -2)
{
if (i == -1)
return false;
else if (i == -2)
return EvenExists(arr, arr.Length - 1);
// ממש משנה הסדר: אם הבדיקת מודולו אחרי הקריאה הרקורסיבית
// ( הקוד יבצע הרבה פעולת מיותרות (יריץ רקורסיה על כל המערך תמיד
else // את מה שכאן חייבים לכתוב הפוך!!!!!!!!!!!!!!
return EvenExists(arr, i - 1) || arr[i] % 2 == 0; //= מימוש גרוע
}
חיפוש בינארי רקורסיבי
עליכם לממש פונקציה רקורסיבית בשם BinarySearch
ב-C# עם הכותרת:public static int BinarySearch(int[] arr, int target)
הפונקציה מקבלת שלושה פרמטרים:
- arr - מערך ממוין של מספרים שלמים.
- target - המספר השלם שיש לחפש במערך.
הפונקציה צריכה לחפש את target
בתוך המערך arr
באמצעות אלגוריתם חיפוש בינארי רקורסיבי.
התנהגות הפונקציה:
- אם target נמצא במערך, הפונקציה תחזיר את האינדקס הראשון שבו הוא מופיע.
- אם target אינו נמצא במערך, הפונקציה תחזיר -1.
הערות חשובות למימוש:
- השתמשו בפרמטרים האופציונליים left ו-right. הפונקציה צריכה להיות ניתנת לקריאה גם עם שני פרמטרים בלבד (arr, target).
- בתוך הפונקציה, אם right הוא -1 (ערך ברירת המחדל בקריאה הראשונית), עליכם לאתחל אותו לאינדקס האחרון של המערך (length - 1).
- האלגוריתם חייב להיות רקורסיבי.
- אין צורך לטפל במקרים שבהם המערך אינו ממוין או מכיל איברים כפולים מעבר לבדיקה שהערך קיים או לא.
מציאת אינדקס ראשון באמצעות רקורסיה
עליכם לממש פונקציה רקורסיבית בשם FindFirstIndex
בשפת C#, בעלת החתימה הבאה:
public static int FindFirstIndex(int[] arr, int target)
הפונקציה צריכה לקבל שלושה פרמטרים:
- arr (int[]) - המערך שבו יש לחפש.
- target (int) - הערך שיש למצוא את האינדקס הראשון שלו.
הפונקציה צריכה להחזיר את האינדקס הראשון שבו מופיע הערך target
בתוך המערך arr
. אם הערך target
אינו נמצא במערך, הפונקציה צריכה להחזיר -1.
דגשים:
- השתמשו בגישה רקורסיבית בלבד לפתרון הבעיה.
- הפונקציה צריכה להיות static ולקבל את הפרמטרים כפי שצוין.
- שימו לב לטיפול במקרי הבסיס של הרקורסיה.
היפוך מערך באמצעות רקורסיה
עליכם לממש פונקציה בשם ReverseString
אשר מקבלת פרמטר אחד: str
- מחרוזת להיפוך
הפונקציה צריכה להחזיר את המחרוזת הפוכה באמצעות רקורסיה.
דגשים חשובים:
- הפונקציה חייבת להיות רקורסיבית
- מקרה הבסיס: מחרוזת ריקה או עם תו אחד
- במקרה הרקורסיבי: קחו את התו הראשון והעבירו אותו לסוף המחרוזת ההפוכה של השאר
טכניקת פתרון:
- אם המחרוזת ריקה או עם תו אחד - החזירו אותה כמו שהיא
- אחרת - החזירו את המחרוזת ההפוכה של כל התווים מהשני ואילך, בתוספת התו הראשון בסוף
סכום איברי מערך רקורסיבי
עליכם לממש פונקציה רקורסיבית ב-C# בשם SumArray
אשר מקבלת מערך של מספרים שלמים arr
.
הפונקציה צריכה להחזיר את סכום כל האיברים במערך, תוך שימוש ברקורסיה.
חתימת הפונקציה:
public static int SumArray(int[] arr)
דגשים:
- יש להגדיר מקרה בסיס שיעצור את הרקורסיה.
- יש לבצע קריאה רקורסיבית שתתקדם במערך.
הדפסת מערך בסדר הפוך (רקורסיה)
עליכם לממש פונקציה רקורסיבית ב-C# בשם PrintArray
עם החתימה הבאה:
public static void PrintArray(int[] arr)
הפונקציה צריכה לקבל מערך של מספרים שלמים (arr
)
המטרה היא להדפיס את כל איברי המערך בסדר הפוך, כאשר כל מספר מופרד ברווח.
דגשים:
- הפונקציה חייבת להיות רקורסיבית.
- יש להשתמש בפרמטר index כדי לעקוב אחר המיקום הנוכחי במערך.
- ודאו שההדפסה היא בסדר הפוך.
- אין צורך לטפל במקרה של מערך ריק או באינדקסים חורגים; המערך יכיל תמיד מספרים שלמים חיוביים.
מיון מיזוג (Merge Sort)
עליכם לממש את הפונקציה הרקורסיבית MergeSort
בשפת C#:
public class Solution
{
public static void MergeSort(int[] arr)
{
// Implement your recursive Merge Sort logic here
}
}
תיאור הפונקציה: הפונקציה MergeSort
מקבלת arr
מערך של מספרים שלמים שיש למיין.
דרישות:
- השתמשו באלגוריתם מיון מיזוג (Merge Sort).
- הפתרון חייב להיות רקורסיבי עבור שלבי החלוקה.
- יש לממש פונקציית עזר למיזוג (Merge).
- הפונקציה אינה מחזירה ערך אלא ממיינת את המערך הנתון במקום (in-place modification).
תהליך מיון מיזוג:
- חלוקה: חלקו את המערך לשני חצאים באופן רקורסיבי עד שמגיעים לתת-מערכים בגודל 1 (או 0).
- מיזוג: מזגו את תתי-המערכים הממוינים בחזרה, תוך שמירה על סדר ממוין.
ספירת מספרים זוגיים במערך רקורסיבית
עליכם לממש פונקציה רקורסיבית ב-C# בשם CountEven
עם החתימה הבאה:static int CountEven(int[] arr)
הפונקציה מקבלת arr
- מערך של מספרים שלמים.
הפונקציה צריכה לספור ולהחזיר את מספר המספרים הזוגיים במערך arr
החל מהאינדקס הנתון (index
) ועד סוף המערך.
דגשים:
- הפתרון חייב להיות רקורסיבי. אין להשתמש בלולאות (for, while, foreach).
- השתמשו במקרה הבסיס כשהאינדקס מגיע לסוף המערך.
האיבר הגדול ביותר במערך (רקורסיבי)
עליכם לממש פונקציה רקורסיבית ב-C# בשם MaxArray
בעלת החתימה הבאה:
static int MaxArray(int[] arr)
הפונקציה תקבל arr
- מערך של מספרים שלמים.
הפונקציה צריכה להחזיר את האיבר הגדול ביותר במערך הנתון, באמצעות גישה רקורסיבית.
הנחיות למימוש הרקורסיה:
- מקרה בסיס: אם הגעתם לאינדקס האחרון במערך
(index == arr.Length - 1)
, החזירו את הערך באינדקס זה. - שלב רקורסיבי: השוו את הערך הנוכחי ב-arr[index] עם הערך המקסימלי שנמצא בשאר המערך (החל מ-index + 1). ניתן לעשות זאת על ידי קריאה רקורסיבית לפונקציה MaxArray עם index + 1.
- החזירו את הערך המקסימלי שנמצא בהשוואה.
דגשים:
- הפונקציה חייבת להיות רקורסיבית.
- אין להשתמש בלולאות (for, while) בתוך הפונקציה.
- אין לטפל במקרה של מערך ריק.
בדיקת מערך ממוין רקורסיבית
עליכם לממש פונקציה רקורסיבית ב-C# בשם IsSorted
בעלת החתימה הבאה:
public static bool IsSorted(int[] arr)
הפונקציה מקבלת arr - מערך של מספרים שלמים.
הפונקציה צריכה לבדוק האם המערך arr
ממוין בסדר עולה (כלומר, כל איבר גדול או שווה לאיבר הקודם לו). עליכם להשתמש בגישה רקורסיבית לפתרון הבעיה.
דגשים:
- יש לטפל במקרה הבסיס הרקורסיבי (מתי עוצרים את הקריאות הרקורסיביות).
- יש לטפל בשלב הרקורסיבי (כיצד הפונקציה קוראת לעצמה עם קלט מצומצם יותר).
- אין לטפל במקרי קצה של מערך ריק
חיפוש איבר במערך רקורסיבי
עליכם לממש פונקציה רקורסיבית ב-C# בשם SearchArray
עם החתימה הבאה:
public static bool SearchArray(int[] arr, int target)
הפונקציה מקבלת שני פרמטרים:
- arr (int[]): המערך שבו יש לחפש.
- target (int): הערך שאתם מחפשים במערך.
הפונקציה צריכה להחזיר:
true
אם הערך target נמצא במערך arr.false
אם הערך target לא נמצא במערך arr.
דגשים:
- הפונקציה חייבת להיות רקורסיבית (אין להשתמש בלולאות).
- יש לטפל במקרה הבסיס הרקורסיבי.
חיפוש רקורסיבי של איבר במערך לא ממויין
עליכם לממש פונקציה רקורסיבית ב-C# בשם SearchArray
עם החתימה הבאה:
public static bool SearchArray(int[] arr, int target) הפונקציה מקבלת שלושה פרמטרים:
- arr (int[]): המערך שבו יש לחפש.
- target (int): הערך שאתם מחפשים במערך.
הפונקציה צריכה להחזיר:
- True אם הערך target נמצא במערך arr.
- False אם הערך target לא נמצא במערך arr.
דגשים:
- הפונקציה חייבת להיות רקורסיבית (אין להשתמש בלולאות).
- יש לטפל במקרה הבסיס הרקורסיבי.