עבור לתוכן

עזרה בתרגיל ברקורסיה

Featured Replies

פורסם

נתון מערך דו-ממדי m המכיל מספרים שלמים אי- שליליים

נגדיר מסלול במערך כאוסף של תאים שכנים במערך הדו-ממדי, (שכנים ממש, לא כולל אלכסון),

המתחיל בתא השמאלי- עליון של המערך ( (row=0, col=0

ומסתיים בתא הימני-תחתון של המערך ( (row=m.length-1, col = m[0].length

עלות המסלול היא סכום הערכים בתאים אשר מרכיבים אותו.

כתבו שיטה סטטית רקורסיבית המקבלת מערך דו-ממדי המלא במספרים שלמים אי- שליליים

ומדפיסה את עלויות כל המסלולים שבמערך.

זה מה שכתבתי:

    public static void printPathWeights(int[][] m)
{
printPathWeights(m, 0, 0, 0);
}


public static void printPathWeights(int[][] m, int row, int col, int sum)
{
if(row == 0 && col ==0)
sum = 0;

if (row == m.length - 1 && col == m[row].length - 1)
System.out.println(sum);

else
{
if (row >= 0 && row < m.length && col >= 0 && col < m[row].length)
printPathWeights(m, row + 1, col, sum += m[row][col]); // Down
if (row >= 0 && row < m.length && col >= 0 && col < m[row].length)
printPathWeights(m, row, col - 1, sum += m[row][col]); // Left
if (row >= 0 && row < m.length && col >= 0 && col < m[row].length)
printPathWeights(m, row, col + 1, sum += m[row][col]); // Right
}
}

הבעיה היא שזה נכנס לי ללופ אינסופי ולא מדפיס כלום

פורסם

אז תיצור לך מערך קטן לדוגמה ותדבג את הפונקציה.

חוץ מזה תלמד מה המשמעות של =+.

נערך על-ידי שניצל

פורסם

ממליץ לך בחום להשתמש בסוגרים בכמות גדולה יותר לדוגמא:

if ((row == m.length - 1) && (col == m[row].length - 1))

דבר שני, מי אמר שבתא 0 0 יש אפס?

דבר שלישי, אתה הולך ימינה ואז אתה הולך שמאלה ואז ימינה תחזור על זה אינסוף פעמים :)

קיצור תלך ימינה או למטה וככה לא תיכנס ללופ אין סופי, בהצלחה!

פורסם

התייחסות למערך כחד מימדי ארוך יקל עליך.

פורסם
  • מחבר

הורדתי את ה-up ואת ה-left וזה מדפיס אבל שמתי לב שזה מפספס תשובות למשל אם אני הולך רק ימינה עד הסוף ואז רק למטה עד הסוף זה יוצא 38 וזה לא מופיע לי באחת מהתשובות

זה המערך שלי:

		int [][] matrix =				{				
{8,4,2,4,3},
{6,3,8,4,5},
{1,4,9,9,7},
{2,1,7,6,5}
};

נערך על-ידי falukky

פורסם

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

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

פורסם
  • מחבר

זה הקוד הרלונטי:

    public static void printPathWeights(int[][] m, int row, int col, int sum)    {
if(row == 0 && col == 0)
sum = 0;

if (row == m.length - 1 && col == m[row].length - 1)
System.out.println(sum);

else
{
if (row >= 0 && row < m.length && col >= 0 && col < m[row].length)
printPathWeights(m, row + 1, col, sum += m[row][col]); // Down


if (row >= 0 && row < m.length && col >= 0 && col < m[row].length)
printPathWeights(m, row, col + 1, sum += m[row][col]); // Right
}
}

פורסם

תנסה לתקן את זה ולבדוק את זה במקרים פשוטים:

if (row == m.length - 1 && col == m[row].length - 1)

System.out.println(sum + m[row][col]);

נערך על-ידי Ligi

פורסם

עובד?

לא עובד?

עידכונים...?

פורסם
  • מחבר

עובד

תודה רבה.

ארכיון

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

דיונים חדשים