פונקציות רקורסיביות חלק 1
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-GDScript של Coddy. שיעור 57 מתוך 78.
פונקציה רקורסיבית היא פונקציה שקוראת לעצמה. כל קריאה פותרת גרסה קטנה יותר של הבעיה, עד שהבעיה קטנה מספיק כדי לענות עליה ישירות.
הפונקציה הזאת מחברת את כל המספרים השלמים מ־1 עד n:
func sum_to_n(n: int) -> int:
if n == 0: # מקרה בסיס
return 0
return n + sum_to_n(n - 1) # צעד רקורסיבייש לה שני חלקים:
- מקרה הבסיס עונה בלי לקרוא לפונקציה שוב: הסכום עד
0הוא0. - השלב הרקורסיבי קורא לפונקציה עם ערך קטן יותר,
n - 1, ובונה את התשובה שלה מתוך התוצאה.
sum_to_n(3) הוא 3 + sum_to_n(2), שהוא 3 + 2 + sum_to_n(1), שהוא 3 + 2 + 1 + sum_to_n(0). מקרה הבסיס מחזיר 0, והקריאות הממתינות מסתיימות אחת אחת: התוצאה היא 6.
כל שלב רקורסיבי חייב לקרב אותנו למקרה הבסיס. בלי מקרה בסיס, או עם שלב כמו n + 1 שלא מגיע אליו לעולם, הפונקציה ממשיכה לקרוא לעצמה. Godot מאפשרת כ-1,000 קריאות מקוננות ואז עוצרת את התוכנית עם שגיאה.
אתגר
קלהתוכנית קוראת מספר שלם שאינו שלילי n (0 או יותר) וקוראת ל־count_down(n).
מתחת ל־_ready(), כתוב את הפונקציה הרקורסיבית count_down עם פרמטר אחד. היא מדפיסה כל מספר מהארגומנט שלה ועד 0, מספר אחד בכל שורה. אל תשתמש בלולאה: הפונקציה מדפיסה את המספר שלה וקוראת לעצמה עם המספר הקטן ממנו.
עבור הקלט 3, הפלט הוא:
3
2
1
0נסו בעצמכם
extends Node
func _ready():
var n := int(OS.read_string_from_stdin())
count_down(n)
# כתבו למטה את הפונקציה הרקורסיבית count_down(n)
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
10פונקציות מתקדמות
החזרת ערכים מרוביםפונקציות Lambda חלק 1פונקציות Lambda חלק 2סיכום – מיון עם Lambdaפונקציות רקורסיביות חלק 1פונקציות רקורסיביות חלק 2סיכום – סכימת מערך מקונן2קבלת החלטות מתקדמת
התאמה עם משתניםתנאי סף להתאמהתבניות מערכיםתבניות מילוניםבדיקות חברותסיכום – מנתח פקודות5אפליקציית ספר אנשי קשר
הצגת התפריטהוספת איש קשר8מנהל רשומות תלמידים
סקירת הפרויקטהוספת תלמידתרגלו בעצמכם: קומפיילר GDScript אונליין