פונקציות רקורסיביות חלק 2
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-GDScript של Coddy. שיעור 58 מתוך 78.
לכל פונקציה רקורסיבית יש את אותם שני חלקים:
- מקרה הבסיס מציין מתי לעצור.
- הצעד הרקורסיבי קורא לפונקציה עם קלט קטן יותר.
העצרת של n היא n * (n - 1) * ... * 1, לכן העצרת של n היא n כפול העצרת של n - 1:
func factorial(n: int) -> int:
if n == 1: # מקרה בסיס
return 1
return n * factorial(n - 1) # צעד רקורסיביfactorial(5) קוראת ל־factorial(4), שקוראת ל־factorial(3), וכך הלאה עד factorial(1), שמחזירה 1. בדרך חזרה, כל קריאה מבצעת כפל: התוצאה היא 120.
קלט קטן יותר לא חייב להיות מספר קטן יותר. גם מחרוזת קצרה יותר מתאימה. הפונקציה הזו הופכת מחרוזת:
func reverse_text(text: String) -> String:
if text.length() <= 1: # מקרה בסיס
return text
return reverse_text(text.substr(1)) + text[0]text.substr(1) היא המחרוזת ללא התו הראשון שלה. הפונקציה הופכת את המחרוזת הקצרה יותר ומוסיפה את התו הראשון בסוף. מחרוזת שמכילה אפס תווים או תו אחד כבר הפוכה, ולכן זהו מקרה הבסיס.
print(reverse_text("hello"))ollehאתגר
קלכתוב פונקציה רקורסיבית בשם fibonacci שמקבלת מספר שלם חיובי n ומחזירה את מספר פיבונאצ'י ה־n:
fibonacci(1)הוא0fibonacci(2)הוא1- עבור
n > 2,fibonacci(n)הואfibonacci(n - 1) + fibonacci(n - 2)
לדוגמה, fibonacci(6) מחזירה 5 (הרצף מתחיל ב־0, 1, 1, 2, 3, 5).
הבדיקות קוראות ל־fibonacci() בעצמן. אל תקרא לה ואל תדפיס שום דבר.
נסו בעצמכם
func fibonacci(n: int):
# כתבו כאן את הקוד
pass
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
10פונקציות מתקדמות
החזרת ערכים מרוביםפונקציות Lambda חלק 1פונקציות Lambda חלק 2סיכום – מיון עם Lambdaפונקציות רקורסיביות חלק 1פונקציות רקורסיביות חלק 2סיכום – סכימת מערך מקונן2קבלת החלטות מתקדמת
התאמה עם משתניםתנאי סף להתאמהתבניות מערכיםתבניות מילוניםבדיקות חברותסיכום – מנתח פקודות5אפליקציית ספר אנשי קשר
הצגת התפריטהוספת איש קשר8מנהל רשומות תלמידים
סקירת הפרויקטהוספת תלמידתרגלו בעצמכם: קומפיילר GDScript אונליין