Menu
CoddyTech

Funkcje rekurencyjne — część 1

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

Rekurencyjna funkcja to funkcja, która wywołuje samą siebie. Każde wywołanie rozwiązuje mniejszą wersję problemu, aż problem będzie na tyle prosty, by można było bezpośrednio na niego odpowiedzieć.

Ta funkcja dodaje liczby całkowite od 1 do n:

func sum_to_n(n: int) -> int:
	if n == 0: # przypadek bazowy
		return 0
	return n + sum_to_n(n - 1) # krok rekurencyjny

Ma dwie części:

  • Przypadek bazowy udziela odpowiedzi bez ponownego wywoływania funkcji: suma do 0 wynosi 0.
  • Krok rekurencyjny wywołuje funkcję z mniejszą wartością, n - 1, i buduje odpowiedź na podstawie wyniku.

sum_to_n(3) to 3 + sum_to_n(2), czyli 3 + 2 + sum_to_n(1), czyli 3 + 2 + 1 + sum_to_n(0). Przypadek bazowy zwraca 0, a oczekujące wywołania kończą się jedno po drugim: wynikiem jest 6.

Każdy krok rekurencyjny musi przybliżać do przypadku bazowego. Bez przypadku bazowego lub z krokiem takim jak n + 1, który nigdy do niego nie prowadzi, funkcja wciąż wywołuje samą siebie. Godot pozwala na około 1 000 zagnieżdżonych wywołań, a następnie zatrzymuje program i zgłasza błąd.

challenge icon

Wyzwanie

Łatwy

Program odczytuje liczbę całkowitą n (0 lub większą) i wywołuje count_down(n).

Poniżej _ready() napisz rekurencyjną funkcję count_down z jednym parametrem. Wypisuje ona każdą liczbę od argumentu aż do 0, po jednej w każdym wierszu. Nie używaj pętli: funkcja wypisuje swoją liczbę i wywołuje samą siebie z następną mniejszą liczbą.

Dla danych wejściowych 3 wynik to:

3
2
1
0

Spróbuj swoich sił

extends Node

func _ready():
	var n := int(OS.read_string_from_stdin())
	count_down(n)

# Napisz poniżej funkcję rekurencyjną count_down(n)
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