Menu
CoddyTech

פונקציות רקורסיביות חלק 2

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-GDScript של Coddy. שיעור 58 מתוך 78.

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

  1. מקרה הבסיס מציין מתי לעצור.
  2. הצעד הרקורסיבי קורא לפונקציה עם קלט קטן יותר.

העצרת של 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
challenge icon

אתגר

קל

כתוב פונקציה רקורסיבית בשם fibonacci שמקבלת מספר שלם חיובי n ומחזירה את מספר פיבונאצ'י ה־n:

  • fibonacci(1) הוא 0
  • fibonacci(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
quiz iconבחנו את עצמכם

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

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

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