Menu
Coddy logo textTech

פונקציות רקורסיביות

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-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.

challenge icon

אתגר

קל

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

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

פורמט הקלט: שורה אחת המכילה מספר שלם חיובי

הפלט הצפוי: סכום כל הספרות במספר

נסו בעצמכם

<?php
// קראו את הקלט
$number = intval(fgets(STDIN));

// TODO: צרו כאן את הפונקציה הרקורסיבית שלכם sumDigits


// קראו לפונקציה והציגו את התוצאה
echo sumDigits($number);
?>
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר PHP אונליין