פונקציות רקורסיביות
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Kotlin של Coddy. שיעור 44 מתוך 63.
פונקציה רקורסיבית קוראת לעצמה עבור תת־בעיה קטנה יותר. מקרה בסיס מחזיר ערך בלי קריאה רקורסיבית נוספת. בחישוב סכום ספירה לאחור, אפס הוא מקרה הבסיס ו־n - 1 מקרב אליו. רקורסיה רגילה משתמשת במקום במחסנית הקריאות, לכן שמרו על עומק קלט קטן.
fun countdownSum(n: Int): Int {
if (n == 0) return 0
return n + countdownSum(n - 1)
}בתוך main:
println(countdownSum(4))הקריאות מחברות ארבע, שלוש, שתיים ואחת, ואז נעצרות באפס.
רקורסיה זקוקה למקרה בסיס שניתן להגיע אליו ולהתקדמות לעברו.
אתגר
בינוניהשלם את recursiveSum עם הפרמטרים number: Int. בעזרת רקורסיה, החזר את הסכום מ־1 עד number. number הוא בין 0 ל־100. התוצאה עבור אפס היא אפס.
אלא אם צוין לעיל טווח מצומצם יותר, אוספים מכילים לכל היותר 100 איברים בכל רמה, וארגומנטים שלמים וערכים שלמים באוספים הם בין -1000 ל־1000. טקסט שמסופק לצורך ניתוח עשוי לכלול ייצוגים לא תקינים או מחוץ לטווח, כמתואר.
החזר ערך מסוג Int. השאר את קוד הקלט/פלט שסופק. הוא קורא ארגומנטים סקלריים, אחד בכל שורה; רשימה מתחילה במספר האיברים שלה ואחריו איבריה, ומפה מתחילה במספר הרשומות שלה ואחריו כל מפתח וערך. רשימות מקוננות חוזרות על התבנית של מספר איברים ואחריו איברים עבור כל שורה. ה־main שסופק מדפיס את הערך המוחזר ואחריו תו שורה חדשה אחד. רשימות משתמשות בפורמט הסטנדרטי של Kotlin עם סוגריים מרובעים; אל תדפיס תוויות נוספות.
נסו בעצמכם
fun recursiveSum(number: Int): Int {
// כתבו את הפתרון שלכם כאן.
return 0
}
fun main() {
val number = readln().toInt()
println(recursiveSum(number))
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
4אוספים מקוננים
רשימות של רשימותמעבר על שורותסיכומים של שורותהשטחת רשימות מקוננותסיכום – שורות של מקומות ישיבה7צינורות עיבוד של אוספים
טרנספורמציה באמצעות Mapסינון ערכיםבדיקת כללי האוסףצבירה באמצעות Foldסיכום – סכומים מאושרים5פרויקט - ספר טלפונים
שמירת אנשי קשרחיפוש אנשי קשר9זרימת בקרה מתקדמת
תנאי שמירהיציאה מלולאות מתויגותהמשך לולאות מתויגותפונקציות רקורסיביותסיכום – השורה התקינה הראשונהתרגלו בעצמכם: Kotlin אונליין