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

נושא: מחפש הסבר על רקורסיה בשפת C

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


הצטרף / הצטרפה: 27 November 2005
משתמש: מנותק/ת
הודעות: 80
נשלח בתאריך: 27 November 2005 בשעה 21:32 | IP רשוּם
ציטוט zoobooboozoo

אם מישהו יכול להסביר לי על רקורסיה, לתת מדריך או דוגמא זה יהיה  נהדר.


תודה
חזרה לתחילת העמוד הצג את כרטיס החבר של zoobooboozoo חפש הודעות אחרות של zoobooboozoo
 
SBD
פורומיסט על
פורומיסט על
סמל אישי

הצטרף / הצטרפה: 13 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 1194
נשלח בתאריך: 27 November 2005 בשעה 23:38 | IP רשוּם
ציטוט SBD

קודם כל הדרה של רקורסיה, זה פתירה של בעיה על ידי אותה בעיה כאשר משתמשים בסופו של דבר באקסיומה[תנאי אם תרצה] מסוימת - סתם ניסוח שלי.

ועכשיו לעברית ;)

שיטה\פונקציה שקוראת לעצמה.
ניקח דוגמא, נניח ואנו לא מכירים את פעולת הכפל [*] איך נוכל לכתוב שיטה שמקבלת שני מספרים וכופלת אחת בשניה?
תשובה:
אנחנו נסתמך על אקסיומה [מעין כלל בסיס] שאומר שכל מספר כפול 0 הוא תמיד יהיה 0, וזה בלי לדעת כפול, זה כלל שידוע לנו ואנחנו מכירים אותו...אז השיטה שלנו תראה ככה:

קוד:
long cefel(int a,int b)
{
 if(a==0||b==0)
  return 0;
 else
  return cefel(a,b-1)+b; 
}

מה שענו פה בעצם, התסמכנו על זה שכפל זה בעצם חיבור של מספר מסוים (A) כמה פעמים (B), ובאקסיומה שאומרת שכל מספר כפול 0 הוא 0, ולכן אם אחד מהם (A או B) הוא אפס, אנחנו ישר יכולים להחזיר אפס. אחרת אנחנו נחזיר את מכפלת המספרים של (A, B-1) ונוסיף לזה את B, שים לב שאנחנו לא יודעים מה זה כפל, אנחנו פשוט נמשיך לבצע את זה עד שאחד מהם יהיה אפס [במקרה הזה B כמובן...] תנסה לעשות איזה טבלת מעקב קטנה ואויל תבין יותר טוב :) אם זה כמובן עדין אל הספיק :)



__________________
~ Nobody Is Perfect, I'm Nobody ~
פורומים
חזרה לתחילת העמוד הצג את כרטיס החבר של SBD חפש הודעות אחרות של SBD בקר בדף הבית של SBD
 
zoobooboozoo
משתמש פעיל
משתמש פעיל


הצטרף / הצטרפה: 27 November 2005
משתמש: מנותק/ת
הודעות: 80
נשלח בתאריך: 28 November 2005 בשעה 00:05 | IP רשוּם
ציטוט zoobooboozoo

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

תודה רבה לך!

ד"א - לא הבנתי את המשפט האחרון
חזרה לתחילת העמוד הצג את כרטיס החבר של zoobooboozoo חפש הודעות אחרות של zoobooboozoo
 
zoobooboozoo
משתמש פעיל
משתמש פעיל


הצטרף / הצטרפה: 27 November 2005
משתמש: מנותק/ת
הודעות: 80
נשלח בתאריך: 28 November 2005 בשעה 16:17 | IP רשוּם
ציטוט zoobooboozoo

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



מבין מה אני מתכוון?
חזרה לתחילת העמוד הצג את כרטיס החבר של zoobooboozoo חפש הודעות אחרות של zoobooboozoo
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

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

קוד:

int azeret(int n)
{
if (n==1){
return 1
}else{
return n*azeret(n-1);
}
}

חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
אבידור
משתמש חבר
משתמש חבר
סמל אישי

הצטרף / הצטרפה: 11 October 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 162
נשלח בתאריך: 28 November 2005 בשעה 17:27 | IP רשוּם
ציטוט אבידור

רקורסיה - הוא תהליך בו פונקציה קוראת לעצמה, או ששתי פונקציות קוראות זו לזו. כל פונקציה הינה עצמאית, וכל קריאה אליה בלתי תלויה בשאר הקריאות לפונקציה זו. מתכנתים מתחילים מתקשים להבין את תהליך הרקורסיה, אך כלי זה נותן עוצמה רבה לשפת התכנות, משום שיש בעיות שלא ניתן לפתור ללא רקורסיה.
מתוך: ספר "שפת C" - יואב נתיב
חזרה לתחילת העמוד הצג את כרטיס החבר של אבידור חפש הודעות אחרות של אבידור
 
SBD
פורומיסט על
פורומיסט על
סמל אישי

הצטרף / הצטרפה: 13 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 1194
נשלח בתאריך: 28 November 2005 בשעה 21:19 | IP רשוּם
ציטוט SBD

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

ד"א לגבי הקטע שזה קשה לתפוס את זה, אני לא ממש בטוח לגבי זה, לפחות לא לאלה שהם ב-4-5 יח"ל במתמתיקה וכבר למדו את הקטע של אקסיומה ומה זה אומר. בכל מקרה גם לאלה שלא ולמדו את זה עוד לפני התיכון [כמוני] זה לא כזה ביג דיל, פונקציה קוראת לעצמה ונעצרת באיזה שהוא שלב שמוגדר בתוכה...



__________________
~ Nobody Is Perfect, I'm Nobody ~
פורומים
חזרה לתחילת העמוד הצג את כרטיס החבר של SBD חפש הודעות אחרות של SBD בקר בדף הבית של SBD
 
asi2k
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 27 October 2005
משתמש: מנותק/ת
הודעות: 6
נשלח בתאריך: 28 November 2005 בשעה 22:16 | IP רשוּם
ציטוט asi2k

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

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

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

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

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