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 rekurencyjnyMa dwie części:
- Przypadek bazowy udziela odpowiedzi bez ponownego wywoływania funkcji: suma do
0wynosi0. - 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.
Wyzwanie
ŁatwyProgram 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
0Spró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)
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
1Łańcuchy znaków — zagadnienia zaawansowane
Metody łańcuchów znakówWyszukiwanie w łańcuchach znakówZastępowanie i przycinanieDzielenie i łączeniePodsumowanie — sprawdzanie nazwy użytkownika4Słowniki, część 2
Zagnieżdżone słownikiTablice słownikówŁączenie słownikówKopiowanie słownikówPodsumowanie – licznik częstotliwości7Typy wyliczeniowe
Czym jest typ wyliczeniowy?Definiowanie typu wyliczeniowegoWartości typu wyliczeniowegoTypy wyliczeniowe w matchPowtórka – sygnalizacja świetlna10Zaawansowane funkcje
Zwracanie wielu wartościFunkcje lambda — część 1Funkcje lambda — część 2Powtórka — sortowanie za pomocą lambdaFunkcje rekurencyjne — część 1Funkcje rekurencyjne — część 2Powtórka — sumowanie zagnieżdżonej tablicy13System zarządzania zapasami
Omówienie projektuDodawanie produktu2Zaawansowane podejmowanie decyzji
Dopasowanie ze zmiennymiStrażnicy dopasowaniaWzorce tablicWzorce słownikówSprawdzanie przynależnościPowtórka — parser poleceń5Aplikacja książki kontaktów
Wyświetlanie menuDodawanie kontaktu8Menedżer danych studentów
Przegląd projektuDodaj studenta3Tablice wielowymiarowe
Podstawy tablic 2DDostęp do elementów tablic 2DPętle zagnieżdżone z tablicami 2DPodsumowanie — tablice 2DTablice postrzępioneTypowe wzorce tablic 2DPodsumowanie — plansza do gry6Zbiory ze słownikami
Czym jest zbiór?Słownik jako zbiórDodawanie i usuwanieSuma i część wspólnaRóżnica zbiorówPowtórka – usuwanie duplikatów9Zaawansowana agregacja danych
Sumowanie wartościZnajdowanie minimum i maksimumSortowanie niestandardowePodsumowanie – Sortownik słownikówPoćwicz samodzielnie: Kompilator GDScript online