פונקציות רקורסיביות
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-PHP של Coddy. שיעור 8 מתוך 68.
רקורסיה היא טכניקת תכנות שבה פונקציה קוראת לעצמה כדי לפתור בעיה. כך נוצר אופן פעולה דמוי לולאה, אך במקום להשתמש בלולאות מסורתיות, הפונקציה קוראת לעצמה שוב ושוב עם פרמטרים ששונו עד שהיא מגיעה לפתרון.
כל פונקציה רקורסיבית חייבת לכלול שני רכיבים חיוניים כדי לפעול כראוי:
מקרה בסיס: זהו התנאי שעוצר את הרקורסיה. בלעדיו, הפונקציה הייתה קוראת לעצמה ללא הגבלה, וגורמת לתוכנית שלך לקרוס. מקרה הבסיס מגדיר מתי הפונקציה צריכה להחזיר תוצאה במקום לקרוא לעצמה שוב.
שלב רקורסיבי: כאן הפונקציה קוראת לעצמה עם גרסה שונה של הבעיה המקורית, תוך התקדמות הדרגתית לעבר מקרה הבסיס.
הנה דוגמה פשוטה לפונקציה רקורסיבית שמחשבת עצרת:
<?php
function factorial($n) {
// מקרה בסיס: העצרת של 1 היא 1
if ($n <= 1) {
return 1;
}
// שלב רקורסיבי: n! = n * (n-1)!
return $n * factorial($n - 1);
}
echo factorial(5); // פלט: 120
?>בדוגמה הזאת, factorial(5) קוראת ל־factorial(4), שקוראת ל־factorial(3), וכן הלאה, עד שהיא מגיעה ל־factorial(1) (מקרה הבסיס). ואז התוצאות מוכפלות בחזרה: 1 × 2 × 3 × 4 × 5 = 120.
אתגר
קלצרו פונקציה רקורסיבית בשם sumDigits שמקבלת מספר שלם חיובי ומחזירה את סכום הספרות שלו. הפונקציה צריכה להשתמש ברקורסיה כדי לפרק את המספר ספרה אחר ספרה.
תקבלו קלט אחד: מספר שלם חיובי. קראו את הקלט, קראו לפונקציה הרקורסיבית שלכם עם המספר הזה והדפיסו את סכום הספרות שלו.
פורמט הקלט: שורה אחת המכילה מספר שלם חיובי
הפלט הצפוי: סכום כל הספרות במספר
נסו בעצמכם
<?php
// קראו את הקלט
$number = intval(fgets(STDIN));
// TODO: צרו כאן את הפונקציה הרקורסיבית שלכם sumDigits
// קראו לפונקציה והציגו את התוצאה
echo sumDigits($number);
?>השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1פונקציות מתקדמות
פונקציות אנונימיותסגירות ו-'use'פונקציות חץפונקציות callbackשימוש ב-'call_user_func'פונקציות משתנותהעברה באמצעות הפניהפונקציות רקורסיביותסיכום: מגוון פונקציות4מערכים רב־ממדיים
יצירת מערך דו־ממדיגישה לאיברי מערך דו־ממדישינוי איברי מערך דו־ממדימעבר באמצעות לולאות מקוננותמערכים אסוציאטיביים דו־ממדייםסיכום: תרגיל רשת פשוטה2מניפולציות מתקדמות במערכים
הוספה באמצעות 'array_push'הסרה באמצעות 'array_pop'הוספה לתחילת המערך באמצעות 'array_unshift'הסרה מתחילת המערך באמצעות 'array_shift'מיזוג מערכים ממוספריםמיזוג מערכים אסוציאטיבייםחילוץ באמצעות 'array_slice'בדיקת ערכים באמצעות 'in_array'חיפוש מפתחות באמצעות 'array_search'סיכום: תרגיל רשימת השמעה3מיון מערכים
מיון מערכים עם אינדקסים בסדר עולהמיון מערכים עם אינדקסים בסדר יורדמיון מערכים אסוציאטיביים לפי ערךמיון מערכים אסוציאטיביים לפי מפתחמיון בסדר טבעימיון מותאם אישית באמצעות 'usort'סיכום: מיון טבלת מוביליםתרגלו בעצמכם: קומפיילר PHP אונליין