Menu
CoddyTech

פונקציות רקורסיביות חלק 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 קריאות מקוננות ואז עוצרת את התוכנית עם שגיאה.

challenge icon

אתגר

קל

התוכנית קוראת מספר שלם שאינו שלילי 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)
quiz iconבחנו את עצמכם

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

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

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