עבור לתוכן

עזרה ברקורסיה בjava

Featured Replies

פורסם

שלום לכולם

זה התרגיל:

tknxa1ujmxzg.jpg

זה הפתרון שלי:


public class arr1 {

public static void g (int [ ] a,int i ) {
if (i>0 || i<a.length) {

if ( i== a.length-1){
if (s(a,i)< 0)
a[i] = -a[i];
}
else {
if (s(a,i)< 0)
a[i] = -a[i];
g(a,i+1);
}
}
}

עכשיו בדקתי את הפתרון והוא נכון בתנאי שמוכנס לi הערך 0 ל i.

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

על משהו אחר מאשר השורה הראשונה שכתבתי בשיטה בין 0 לסוף המערך..

או שיש דרך אחרת לכתוב את השיטה.

זה קורה לי בהרבה תרגילי מעבר לרקורסיה , השאלה שלי האם זה יהיה נכון להשאיר את זה ככה?

תודה לעוזרים.

פורסם

דבר ראשון תכתוב שתי מתודות (איזה מן תרגום טיפשי זה "שיטה")

הראשונה תהיה g והשניה g1

g תקבל רק את המערך והיא תקרא ל-g1 ותשלח אליה את המערך ואת i=0

g1 תהיה הרקורסיבית וככה אתה מבטיח שהיא תקבל i=0 בקריאה הראשונה אליה.

דבר שני גוף הרקורסיה שלך בנוי לא טוב.

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

 if ( i== a.length) return

אחרי זה תכניס את ה-else שלך ומה שאחריו.

פורסם

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

פורסם

מסכים אתך שניצל...

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

גם הקוד עצמו יעבוד אבל הוא ממש לא מובן ויש קוד מיותר.

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

פורסם

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

פורסם
  • מחבר

אוקיי תודה על העזרה.

הבעיה היא חלק משאלה ממבחן באופ לקורס מדעי המחשב משנת 2005 אם אני לא טועה.

ארכיון

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

דיונים חדשים