24-12-2008, 00:23
|
|
|
|
חבר מתאריך: 21.12.04
הודעות: 30,021
|
|
רקורסיה, בגדול, זו דרך שונה לבצע פקודות בלולאה עד תנאי עצירה מסויים.
לעיתים שימוש ברקורסיה הוא 'טבעי' יותר מאשר שימוש איטרטיבי (לולאות רגילות, while / for).
רקורסיה זו למעשה פונקציה שקוראת לעצמה, ואשר מקבלת פרמטרים עד אשר תנאי ידוע מתקיים.
דוגמא:
קוד:
double power(double x, int n) {
if(n == 0)
return 1.0;
else
return x * power( x , n - 1 );
}
בדוגמא הזו אתה יכול לראות שכדי לחשב את החזקה של מספר מסויים, אני שולח לפונקציה 2 פרמטרים, אשר אחד הוא הבסיס ואחד הוא החזקה.
בכל פעם שהפונקציה מופעלת, היא מקבלת את הבסיס שאינו משתנה ( x ) ואת החזקה הבאה שהיא צריכה לכפול בה, עד אשר החזקה המתקבלת - היא 0.
כאשר אנחנו מגיעים לחזקה 0, אנחנו יודעים שהתשובה היא 1 (כל מספר בחזקה 0 הוא המספר 1) ואת הערך הזה אנחנו מחזירים ברקורסיה בחזרה, מה שאומר שהערך הזה יוכפל ב x ושוב יחזור לפונקציה שקראה לו - עד אשר תגיע לפונקציה המקורית שתחזיר את התשובה ל main (או למי שלא קרא לפונקציה הזו).
מצטער אם זה נשמע מסובך, נסה להריץ כמה פעמים את זה בראש ואתה כבר תבין איך זה עובד (נניח ש x זה 4 ו- n הוא 3)... למי שרגיל לעבוד עם לולאות רגילות זה לוקח כמה שניות ככה לעשות סוויץ' בראש כדי להכנס לחשיבה של רקורסיה.
שורה תחתונה - זו פשוט לולאה עם תנאי עצירה
|