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

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


falukky

Recommended Posts

נתון מערך דו-ממדי 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}
};

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

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

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

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

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

    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
}
}

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

ארכיון

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

×
  • צור חדש...