Menu
CoddyTech

Funkcje rekurencyjne — część 2

Część sekcji Logika i przepływ programu ścieżki GDScript w Coddy. Lekcja 58 z 78.

Każda funkcja rekurencyjna składa się z tych samych dwóch części:

  1. Przypadek bazowy określa, kiedy należy się zatrzymać.
  2. Krok rekurencyjny wywołuje funkcję z mniejszym argumentem.

Silnia z n to n * (n - 1) * ... * 1, więc silnia z n to n razy silnia z n - 1:

func factorial(n: int) -> int:
	if n == 1: # przypadek bazowy
		return 1
	return n * factorial(n - 1) # krok rekurencyjny

factorial(5) wywołuje factorial(4), które wywołuje factorial(3), aż do factorial(1), które zwraca 1. Wracając, każde wywołanie mnoży: wynikiem jest 120.

Mniejsze dane wejściowe nie muszą być mniejszą liczbą. Krótszy ciąg znaków też się sprawdzi. Ta funkcja odwraca ciąg znaków:

func reverse_text(text: String) -> String:
	if text.length() <= 1: # przypadek bazowy
		return text
	return reverse_text(text.substr(1)) + text[0]

text.substr(1) to ciąg znaków bez pierwszego znaku. Funkcja odwraca ten krótszy ciąg i dodaje pierwszy znak na końcu. Ciąg zawierający zero lub jeden znak jest już odwrócony, więc stanowi przypadek bazowy.

print(reverse_text("hello"))
olleh
challenge icon

Wyzwanie

Łatwy

Napisz rekurencyjną funkcję o nazwie fibonacci, która przyjmuje dodatnią liczbę całkowitą n i zwraca n-tą liczbę Fibonacciego:

  • fibonacci(1) to 0
  • fibonacci(2) to 1
  • dla n > 2, fibonacci(n) to fibonacci(n - 1) + fibonacci(n - 2)

Na przykład fibonacci(6) zwraca 5 (ciąg zaczyna się od 0, 1, 1, 2, 3, 5).

Testy same wywołują fibonacci(). Nie wywołuj jej i niczego nie wypisuj.

Spróbuj swoich sił

func fibonacci(n: int):
	# Wpisz kod tutaj
	pass
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator GDScript online