שאלה ברקורסיה - משהו עקרוני - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

שאלה ברקורסיה - משהו עקרוני


Yehudaa

Recommended Posts

זאת השאלה :

כתבו שיטה סטטית רקורסיבית

public static int[] merge (int[] ar1, int[] ar2

המקבלת שני מערכים חד-ממדיים המכילים מספרים שלמים ממוינים בסדר עולה, ומחזירה

מערך ממוין המכיל את כל האיברים של שני המערכים. כאשר כל איבר מופיע כמספר הפעמים שהוא הופיע במערכים הנתונים , כולל איברים זהים .

לפתור את השאלה תוך כדי שינוי ar1 ar2 אני משער שאני יכול לפתור

איך אני פותר את השאלה ללא שינוי המערכים הנ"ל ?

קישור לתוכן
שתף באתרים אחרים

תודה :)

לא שמתי לב שיש לי כבר פיתרון לזה . הנה הפתרון לכל המעונינים

 public class question1
{
public static int[] merge (int[] ar1, int[] ar2)
{
int[] ar3 = new int[ar1.length+ar2.length];
return merge(ar1,0,ar2,0,ar3,0);
}

private static int[] merge(int[] ar1, int ind1, int[] ar2, int ind2, int[] ar3, int ind3)
{
if(ind1 >= ar1.length && ind2 >= ar2.length)
return ar3;
if(ind1 >= ar1.length){
ar3[ind3] = ar2[ind2];
return merge(ar1, ind1, ar2, ind2+1, ar3, ind3+1);
}
if(ind2 >= ar2.length){
ar3[ind3] = ar1[ind1];
return merge(ar1, ind1+1, ar2, ind2, ar3, ind3+1);
}

if(ar1[ind1] > ar2[ind2]){
ar3[ind3] = ar2[ind2];
return merge(ar1, ind1, ar2, ind2+1, ar3, ind3+1);
}
else{
ar3[ind3] = ar1[ind1];
return merge(ar1, ind1+1, ar2, ind2, ar3, ind3+1);
}
}

קישור לתוכן
שתף באתרים אחרים

צור מערך חדש, מזג את שני הפרמטרים לתוכו, מיין אותו ותחזיר.

התשובה היא של סטודנט,ולא של האקדמיה .

ד"א שמת לב שהפתרון צריך להיות ברקורסיה בלבד ? איך התכוונת לתפור את זה ? לא הבנתי .

תודה .

קישור לתוכן
שתף באתרים אחרים

ברור .. אכן גם פתרון פשוט .

אז אתה אומר שבעולם האמיתי לצורך יעילות היום משתמשים בMERGESORT ולא כותבים קוד שעלול לא להיות יעיל בכלל ? (כמו הדוגמא למעלה )

ד"א אל תיהיה כל כך קפדן ;) זה בסך הכל שאלה מהמבוא , ולא פעם ולא פעמיים דורשים פתרון יעיל . פשוט במקרה הזה לא דרשו .

קישור לתוכן
שתף באתרים אחרים

כן ולא. לא פעם דווקא צריך לכתוב איזה אלגוריתם בסיסי, אפילו מיון. זה תלוי בדרישות, בשפה וכו'. בד"כ עדיף להשתמש בספריה או בתשתית, כמובן.

בכל מקרה כדאי (ולאקדמאים, הכרחי) להכיר את הבסיס.

ציטוט טוב שיסביר את הכיוון הכללי:

I want my ER doctor to understand anatomy, even if all she has to do is put the computerized defibrillator nodes on my chest and push the big red button, and I want programmers to know programming down to the CPU level, even if Ruby on Rails does read your mind and build a complete Web 2.0 social collaborative networking site for you with three clicks of the mouse.

udii - בשביל שלמות כדאי שתכניס קצת בדיקת מקרים קיצוניים לדוגמא אם אחד המצביעים הוא NULL. בתרגיל בית נוטים להוריד נקודות על דברים כאלה (תלוי בקורס).

קישור לתוכן
שתף באתרים אחרים

אני מסכים לגבי ה-"פעם ב-"; למרות שזה קורה לעיתים רחוקות מאוד.

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

קישור לתוכן
שתף באתרים אחרים

אני מסכים לגבי ה-"פעם ב-"; למרות שזה קורה לעיתים רחוקות מאוד.

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

עניין של דעה ולא ממש רלוונטי לדיון (אתה מוזמן לפתוח אחד אחר), אז הבה נחזור לענייננו.

המטרה של הציטוט היתה לתת נימוק (דרך אנלוגיה) למדוע חשוב ללמד את הבסיס.

במקרה זה, udii הרוויח שלוש פעמים: הוא (היא?) גם למד קצת C ופוינטרים, הוא גם למד קצת רקורסיה, והוא גם למד על אלגוריתם בסיסי למיון שנראה merge sort. פשוט מעולה! (וזו הסיבה שברעיונות עבודה אני שואל על merge sort מדי פעם).

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...