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:
- Przypadek bazowy określa, kiedy należy się zatrzymać.
- 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 rekurencyjnyfactorial(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"))ollehWyzwanie
ŁatwyNapisz rekurencyjną funkcję o nazwie fibonacci, która przyjmuje dodatnią liczbę całkowitą n i zwraca n-tą liczbę Fibonacciego:
fibonacci(1)to0fibonacci(2)to1- dla
n > 2,fibonacci(n)tofibonacci(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
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