עבור לתוכן

שאלה ב JAVA ברקורסיה

Featured Replies

פורסם

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

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

public class Func
{
public static int func(int [] arr) // origianl method
{
return func(arr , 0 , arr.length-1); // overloading
}

private static int func( int [] arr , int lo ,int hi)
{
if(lo == hi)
return 0;
else if (arr[lo]+1 == arr[lo +1])
{
return (1+func(arr , lo+1 , hi));
}
else
return func(arr , lo+1 , hi);
}

}

פורסם

למה לא משהו כזה ?


public static int func(int[] arr)
{
return func(arr, 0, 1, 0);
}

public static int func(int[] arr, int i, int cur, int longest)
{
if (arr[i] == arr[i + 1])
cur++;
else
cur = 1;
if (cur > 1 && cur > longest)
longest = cur;
if (i == arr.length - 1)
return longest;
return func(arr, ++i, cur, longest);
}

פורסם

פששש exercise :xyxthumbs:

רקורסיה אלגנטית

פורסם
  • מחבר

אם הידע שלי אני לא יכול לאשר עד כמה זה אלגנטי או לא ,אבל זה בהחלט יפה :)

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

ותודה על התשובה :xyxthumbs:

פורסם

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

פורסם

תיקון לפונקציה של exercise

יש שמה כמה בעיות צריך להעביר את הבדיקה של סוף המערך להתחלה וגם בדיקה של איבר עוקב צריך לכתוב

		if (arr[i]+1 == arr[i + 1])

זהו בעיקרון זה ב C# אבן אין כמעט הבדל.

    public static int func(int[] arr)
{
return func(arr, 0, 1, 0);
}

public static int func(int[] arr, int i, int cur, int longest)
{
if (i == arr.Length - 1)
return longest;
if (arr[i]+1 == arr[i + 1])
cur++;
else
cur = 1;
if (cur > 1 && cur > longest)
longest = cur;
return func(arr, ++i, cur, longest);
}

פורסם

את הקטע של האיבר עוקב, סתם טעות מפגרת שלא שמתי לב להגדרה.

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

הסיבה לשינוי אצלי הוא הטעות שיהיה בריצה שלך באיבר האחרון (הוא לא יספר).

פורסם

למה שלא יספר?

cur מתחיל מ1. נגיד יש לנו 3 אברים עוקבים במערך בין 3 אברים. אז באיבר הראשון זה יעלה ל2, באיבר השני זה יעלה ל3, ובאיבר ה3 - 3 יזרק.

מצד שני, הקוד שלך חשוף לarray out of bound exception במקרה והמערך בגודל 1.

פורסם

גם אם הוא לא 1 היתה חריגה מגבולות המערך.

פורסם

צודק

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים