ABA


"עזרה עם רקורסיה ממש מעצבנת !!"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #20601 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 20601
IdoA
חבר מתאריך 1.8.02
19395 הודעות
   20:43   20.03.14   
אל הפורום  
  עזרה עם רקורסיה ממש מעצבנת !!  
 
להלן קטע קוד

int SetGenereator(TREE table,int *num,int target,int i)
{
int count=0;
if (i==table.n) return count+=SetCheck(table,num,target);
table.truefalse=false;
SetGenereator(table,num,target,i+1);
table.truefalse=true;
SetGenereator(table,num,target,i+1);
return count;
}

int SetCheck(TREE table,int *numbers,int target)
{
int i=0,sum=0;
for(;i<table.n;i++)
{
sum+=numbers*table.truefalse;
if (sum > target) return 0;
}

if (sum==target)
{
printline(table,numbers,target);
return 1;
}
return 0;
}

אני רוצה שהפונקציה SETGENERATOR תספור את הערך שSETCHECK מחזיר.

אני יושב על הקטע הזה כבר שבוע !!

מה אני מפספס פה?
תודה לעוזרים

Do you ever listen to K Billy's Super Sounds of the 70's?


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  יש פה בעיה.. אתה מאתחל משתנה מקומי count ואז קורא לעצמך ברקורסיה איציק2 20.03.14 21:48 1
     מדוע עלי לשנות את כל הרקורסיה? IdoA 20.03.14 21:52 2
         כנס איציק2 20.03.14 22:12 3
             אין לי כוח להבין את התוכנית אבל... CPU 20.03.14 22:34 4
             אני רוצה לדעת כמה פעמים הפונ' SETCHECK החזירה 1 IdoA 21.03.14 01:34 5

       
איציק2
חבר מתאריך 26.4.08
2436 הודעות
   21:48   20.03.14   
אל הפורום  
  1. יש פה בעיה.. אתה מאתחל משתנה מקומי count ואז קורא לעצמך ברקורסיה  
בתגובה להודעה מספר 0
 
   מה שגורם לך ליצור שוב משתנה מקומי count שמסתיר את הראשון...
עכשיו אתה מבצע חישוב נניח כשהגעת לתנאי עצירה שלך, והחישוב מתבצע על המשתנה count הnי שלך. אחרי שעשית את הreturn המחסנית שחררה את הcount הnי ואיתו את הערך שרצית שיחזור, כאשר לא תפסת את הערך שחוזר מהקריאה לעצמך.. ובעצם נשארת עם count = 0 ביד.

בשביל לגרום לזה לעבוד אתה צריך לעשות 1 מבין ה2 (לפי מה שאני רואה לפחות)
א. לשנות את כל הרקורסיה שלך
ב. להעביר את count כפוינטר/רפרנס, ככה שהמידע ישמר בheap, וכשתחזור לפונק' המקורית הערך ישאר אצלך ביד בתוך המשתנה count...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
IdoA
חבר מתאריך 1.8.02
19395 הודעות
   21:52   20.03.14   
אל הפורום  
  2. מדוע עלי לשנות את כל הרקורסיה?  
בתגובה להודעה מספר 1
 

ולהעביר את המונה כפוינטר אני תמיד יכלתי, אבל לא רציתי. השאיפה היא זה להשתמש בפונקציה כמונה..

Do you ever listen to K Billy's Super Sounds of the 70's?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
איציק2
חבר מתאריך 26.4.08
2436 הודעות
   22:12   20.03.14   
אל הפורום  
  3. כנס  
בתגובה להודעה מספר 2
 
   כ"א מהקריאות ל SetGenereator מחזירה ערך.
אם תעשה נניח
counter += SetGenereator left
counter += SetGenereator right

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

מה שאני בא להגיד זה שהמימוש שעשית מתאים יותר למצב שאתה מעביר פוינטר כי אתה עושה רק return עם ערך ולא עושה עם הערך החוזר כלום, בנוסף אין התיחסות למה קורה עם הערך שחוזר מהפעם הראשונה והפעם השניה מהפונק' (האם אתה סוכם אותם יחד? מה אתה רוצה לעשות עם זה?)


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
CPU
חבר מתאריך 10.6.13
651 הודעות
   22:34   20.03.14   
אל הפורום  
  4. אין לי כוח להבין את התוכנית אבל...  
בתגובה להודעה מספר 3
 
   אם הבעיה היא שהמשתנים כל פעם מתאפסים בגלל שזה רקורסיה

אז תגדיר את המשתנים שצריכים להתקדם ולא להתאפס כ static int

כמובן שאם אתה עושה ככה זה כבר פתרון איטריבי ופחות רקורסיבי


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
IdoA
חבר מתאריך 1.8.02
19395 הודעות
   01:34   21.03.14   
אל הפורום  
  5. אני רוצה לדעת כמה פעמים הפונ' SETCHECK החזירה 1  
בתגובה להודעה מספר 3
 
זה מה שאני רוצה לדעת, וכפי שאפשר לראות אני קורא לה כל איטרציה שונה של SETGENERATOR שהיא הרקורסיבית

Do you ever listen to K Billy's Super Sounds of the 70's?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net