נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
מדעי המחשב
RSS UnderWarrior Forums : RSS מדעי המחשב
נושא

נושא: java- הוספת counter לרקורסיה

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
lilir
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 20 November 2010
מדינה: Israel
משתמש: מנותק/ת
הודעות: 2
נשלח בתאריך: 20 November 2010 בשעה 12:15 | IP רשוּם
ציטוט lilir

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

הפונקציה כתובה בצורה רקורסיבית.

אני מנסה להגדיר counter כלשהו שיספור את הפעולות הרקורסיביות שנעשות בפונקציה וכך לקבוע אם תורי או תור היריב.
אם counter%2==0 אז תורי, אם counter%2==1 אז תור היריב.

הבעיה היא שנעשות כמה קריאות רקורסיביות לאותה הפונקציה בתוך הפונקציה כך שהcounter שלי לא אמין.

האם יש לי דרך אחרת לברר אם תורי או תור היריב? או האם אני יכול לפתור את בעיית הcounter?

הקוד:

public class Tests {// test for function matches
public static void main(String[] args) {
int numOfMaches = 20;
int x = 2;
int y = 6;
boolean anss=false;
anss=matches(numOfMaches,x,y);
System.out.print(anss);
}
/******************** Task 1 ********************/
static int counter=0;
public static boolean matches(int numOfMatches, int x, int y){
boolean ans = false;
if (numOfMatches==1 || numOfMatches==x || numOfMatches==y){
if (counter%2==0)
ans=true;
if (counter%2==1)
ans=false;
}
else{
counter=counter+1;
if (numOfMatches<0)
ans=false;
else{
if (counter%2==0){
if (matches(numOfMatches-1,x,y)==true)
numOfMatches=numOfMatches-1;
else {
if (matches(numOfMatches-x,x,y)==true)
numOfMatches=numOfMatches-x;
else{
if (matches(numOfMatches-y,x,y)==true)
numOfMatches=numOfMatches-y;
}
}
}
else{//if counter%2==1
matches(numOfMatches-1,x,y);
matches(numOfMatches-x,x,y);
matches(numOfMatches-y,x,y);
}
}
}
return ans;
}
}


הפונקציה בודקת משחק גפרורים בו יש 20 גפרורים על השולחן (יכול להיות מספר אחר) ושני שחקנים משחקים. כל שחקן יכול לקחת 1 או x או y גפרורים (במקרה הנ"ל x=2, y=6). מנצח מי שבתורו לקח את כל הגפרורים שנשארו (צריך לקחת בדיוק 1, 2 או 6).
הפונקציה מחזירה "אמת" אם יש לי דרך בטוחה לנצח בהינתן מס' גפרורים מסויים, ו-"שקר" אם אין לי דרך בטוחה.


כל עזרה תתקבל בברכה, אני יושב על זה כבר יותר מ-4 שעות רצוף ולא מצאתי פיתרון לבעיית ה-counter.
חזרה לתחילת העמוד הצג את כרטיס החבר של lilir חפש הודעות אחרות של lilir
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 20 November 2010 בשעה 16:06 | IP רשוּם
ציטוט shoshan

תשמור את counter כפרמטר בפונקציה במקום כמשתנה סטאטי

__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
lilir
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 20 November 2010
מדינה: Israel
משתמש: מנותק/ת
הודעות: 2
נשלח בתאריך: 20 November 2010 בשעה 19:22 | IP רשוּם
ציטוט lilir

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

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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