18-06-2005, 16:26
|
|
|
|
חבר מתאריך: 20.06.03
הודעות: 5,616
|
|
מיני, בואי נעזור לבחור שהגיע עד לפה...(:
טוב, על מנת לא להכנס להגדרות מתמטיות (אם יש בעייה עם אנגלית, אני חושב גם שתהיה בעיה עם מתמטיקה גבוהה) נדגים רקורסיה:
רקורסיה בפשטות (אבל מממממש בפשטות) היא פונקציה הקוראת לעצמה.
לדוגמה:
קוד PHP:
int func(x) retrun func(x+1);
הפונקציה הזו מבצעת בסה"כ קריאה לעצמה תוך הגדלת הערך שהיא שולחת לעצמה כל פעם ב-1. הפונקציה הזו לא עושה שום דבר מאשר לתקוע את התכנית שתריץ אותה, ומדוע? מכיוון שאין לה תנאי כלשהו שמורה לה מתי לעצור.
נדגים רקורסיה מעשית:
פעולת ! (עצרת) היא פעולה המוגדרת כהכפלת כל המספרים השלמים מ-1 ועד n כל עוד n גדול מ-0.
כלומר !4 היא הפעולה 1*2*3*4
נדגים רקורסיה שמבצעת זאת:
קוד PHP:
int factorial(int n) { if (n==1) return 1; else return factorial(n-1)*n; }
הפונקציה הזו פועלת כך: כאשר n שווה ל-1, זהו תנאי העצירה שלנו, כלומר פה מסתיימת הרקורסיה והיא לא קוראת שוב לעצמה, אלא מחזירה את הערך 1.
בכל מקרה אחר (כמובן כש-n גדול מאחד) הפונקציה קוראת לעצמה ומכפילה את n בערך המוחזר שהוא קטן ב-1 כל הזמן עד אשר יהיה 1.
פונקציה זו היא שלד עקרוני שלא בודק עם הערך המתקבל הוא 0 או מספר שלילי, היא נועדה רק להדגים את הרקורסיה.
עקרונית, כל מה שניתן לבצע עם רקורסיה, ניתן לבצע גם בצורה איטרטיבית. השאלה היא תמיד שאלה של יעילות ושמישות.
|