Co to jest rekurencja i jak z niej korzystać?

Co to jest rekurencja i jak z niej korzystać?

Rekurencja to fajna koncepcja programowania, ale może być trochę trudna do nauczenia. Rekurencja oznacza po prostu coś, co się powtarza. Jeśli chcesz zobaczyć bezczelny przykład rekurencji, spróbuj wyszukać rekurencję w Google. Znajdziesz jajko wielkanocne, w którym sugestie wyników wyszukiwania są rekurencyjne. Jeśli natomiast chciałbyś nauczyć się kodować funkcję rekurencyjną, czytaj dalej!

Co to jest funkcja rekurencyjna?

Funkcja rekurencyjna to funkcja, która wywołuje samą siebie. Zasadniczo tworzysz pętlę z funkcją. Jak możesz sobie wyobrazić, mogą to być trudne do napisania funkcje. Nie chcesz, aby Twój kod działał w nieskończoność.

Podobnie jak pętla, funkcja rekurencyjna będzie kontrolowana przez warunek. Gdy warunek zostanie spełniony, funkcja przestaje się wywoływać, co zatrzymuje pętlę. W ten sposób możesz utworzyć funkcję, która sama się wywołuje, nie działając wiecznie.

Chociaż funkcja rekurencyjna działa jak pętla, komputer wykonuje ją inaczej. Tak więc niektóre algorytmy są bardziej wydajne w pętli, a inne korzystają z funkcji rekurencyjnej. Ale zanim przyjrzymy się, jak używać funkcji rekurencyjnej, musisz wiedzieć, jak ją napisać.

Jak napisać funkcję rekurencyjną

Wszystkie funkcje rekurencyjne mają tę samą podstawową strukturę:

FUNCTION name IF condition THEN RETURN result ELSE CALL FUNCTION name END FUNCTION

Powyższy przykład jest napisany w pseudokodzie. Przedstawia strukturę funkcji, którą można zastosować do dowolnego języka. Dla uproszczenia w tym artykule skupimy się na Pythonie.

Pierwszą rzeczą, na którą należy zwrócić uwagę w przypadku funkcji rekurencyjnej, jest to, że gdy warunek jest spełniony, funkcja wychodzi z rekurencji. Oznacza to, że kiedy piszesz funkcję rekurencyjną, pierwszą rzeczą, którą będziesz chciał określić, jest kiedy zatrzymać rekurencję.

Jeśli warunek nie zostanie spełniony, funkcja wywoła samą siebie. Tak więc, jeśli chcesz wysłać informację do następnej pętli, będziesz musiał wysłać ją jako argument w swojej funkcji. Może to dać funkcjom rekurencyjnym znacznie większą moc.

Powiązane: Co to jest funkcja w programowaniu?

Przykład funkcji rekurencyjnej w Pythonie

O wiele łatwiej będzie zrozumieć, jak działa rekurencja, gdy zobaczysz ją w akcji. Aby to zademonstrować, napiszmy funkcję rekurencyjną, która zwraca silnię liczby.

Silnia zwraca iloczyn liczby i wszystkich poprzedzających ją liczb całkowitych. Na przykład silnia 5 to 5 x 4 x 3 x 2 x 1 lub 120.

def factorialFunction(numberToMultiply): if numberToMultiply == 1 : return 1 else : return numberToMultiply * factorialFunction(numberToMultiply - 1) result = factorialFunction(3) print(result) //Outputs: 6

Powyższy program da ci wynik 6, który jest silnią liczby 3. Na początku może to być trochę mylące. Pomoże, jeśli przejdziemy przez program krok po kroku.

  1. Gdy funkcja jest wywoływana, numberToMultiply równa się 3.
  2. Warunek nie jest spełniony, więc przechodzimy do warunku else .
  3.  Nasza funkcja zwraca 3 *, ale zostaje zatrzymana. Musi wywołać siebie, aby określić resztę zwracanej wartości.
  4. Gdy funkcja jest wywoływana tym razem, wartość numberToMultiply wynosi 2.
  5. Warunek nie jest spełniony, więc przechodzimy do warunku else.
  6. Nasza funkcja zwraca 2 *, ale zostaje zatrzymana. Musi wywołać siebie, aby określić resztę zwracanej wartości.
  7. Funkcja jest ponownie wywoływana. Tym razem wartość numberToMultiply wynosi 1.
  8. Nasz jeśli warunek jest spełniony. Funkcja zwraca 1.
  9. Funkcja z kroku 6 może teraz zwrócić 2 * 1 do funkcji z kroku 3.
  10. Funkcja w kroku trzecim może teraz zwrócić 3 * 2 * 1, czyli 6.

Co to jest rekurencja i jak z niej korzystać?

Rekurencja to trudna koncepcja. Pomocne może być myślenie o tym jako o układaniu jednej funkcji na drugiej. Gdy jedna funkcja zostanie ostatecznie rozwiązana, może wysłać informacje z powrotem na stos, dopóki wszystkie funkcje nie będą miały odpowiedzi.

To jest właściwie to, co robi twój komputer. Kiedy wywołujesz funkcję, jest ona przechowywana w pamięci do czasu jej zwrócenia. Oznacza to, że funkcje rekurencyjne mogą zużywać znacznie więcej pamięci niż pętla.

Tak więc pisanie pętli jako funkcji rekurencyjnych może nie być wydajne, ale jest to świetny sposób na przećwiczenie ich konstruowania. Powinieneś być w stanie kodować pętle jako funkcje rekurencyjne z podobnymi wynikami.

Przykład konwersji pętli na funkcję rekurencyjną

print("Enter an even number:") i = int(input()) while (i % 2) != 0 : print("That number is not even. Please enter a new number:") i = int(input())

Tę pętlę można również zapisać rekurencyjnie jako:

def recursiveFunction(number) : if (number % 2) == 0 : return number else: print("That number is not even. Please enter a new number:") recursiveFunction(int(input())) print("Enter and even number:") i = recursiveFunction(int(input()))

Pierwszym krokiem jest określenie, kiedy funkcja ma się zatrzymać. W tym przypadku chcemy, aby zatrzymało się po wprowadzeniu liczby parzystej. W naszym przykładzie liczba śledzi dane wprowadzone przez użytkownika. Jeśli wprowadzą liczbę parzystą, zwracamy liczbę. W przeciwnym razie nadal będziemy prosić o nowy numer.

Aby ustawić pętlę, ponownie wywołujemy naszą funkcję. Ale tym razem numer, który przekazujemy do następnej funkcji, to nowy numer wprowadzony przez użytkownika. Następne wywołanie funkcji sprawdzi numer.

To naprawdę zła funkcja! Tak, sprawdza, czy liczba jest parzysta, jak nasza pętla, ale nie jest wydajna. Za każdym razem, gdy użytkownik wprowadzi nieparzystą liczbę, funkcja jest zatrzymywana w pamięci i wywoływana jest nowa funkcja. Jeśli zrobisz to wystarczająco dużo razy, zabraknie Ci pamięci!

Powiązane: Podstawowe przykłady Pythona, które pomogą Ci szybko się uczyć

Prawdziwy przykład funkcji rekurencyjnej

Powyższe przykłady były dobrymi przykładami tego, kiedy nie używać rekurencji. Więc gdzie jest używana rekurencja? Dobrym przykładem tego, kiedy chciałbyś użyć rekurencji, jest przeszukiwanie drzewa binarnego.

Co to jest rekurencja i jak z niej korzystać?

Kiedy dane mają strukturę drzewa binarnego, musisz przejść wiele ścieżek, aby wyszukać dane. W każdym punkcie drzewa musisz zdecydować, czy chcesz kontynuować wyszukiwanie z prawej, czy z lewej strony. Możesz zapisać w zmiennej, którą część drzewa odwiedziłeś, ale funkcja rekurencyjna może naturalnie śledzić te informacje.

Wyobraź sobie, że szukamy szóstki na powyższym drzewie. Moglibyśmy stworzyć funkcję rekurencyjną, która przeszukuje drzewo od lewej do prawej. Algorytm wyglądałby mniej więcej tak:

FUNCTION searchTree(branchToSearch) IF find 6 OR end of tree THEN RETURN result ELSE PROCESS branch CALL FUNCTION searchTree(left) CALL FUNCTION searchTree(right) END FUNCTION

W tym przykładzie pseudokodu algorytm najpierw przeszuka lewą stronę drzewa. Za każdym razem, gdy odwiedza nowy numer, funkcja jest wstrzymywana i przechowywana w pamięci. To pozwala nam śledzić, gdzie byliśmy.

Algorytm zawsze najpierw przeszuka lewą stronę, o ile może. gdy dojdzie do końca drzewa, searchTree (po lewej) zakończy się i sprawdzi prawą stronę. Po sprawdzeniu obu stron wyszukiwanie cofa jedną gałąź i kontynuuje sprawdzanie prawej strony.

Gdyby algorytmy przeszukały całe drzewo, zrobiłyby to w kolejności:

2, 7, 2, 6, 5, 11, 5, 9 i 4

Sprawdź, czy możesz śledzić dalej, używając powyższego pseudokodu.

Przegląd rekurencji

Rekurencja to zaawansowany temat. Zrozumienie tego zajmie trochę czasu, a jeszcze dłużej stanie się dobrym w kodowaniu. Pomoże, jeśli przejdziesz krok po kroku przez funkcje rekurencyjne. Może nawet pomóc układanie kartek indeksowych lub karteczek samoprzylepnych podczas przechodzenia przez funkcję podczas uczenia się reprezentowania każdego wywołania funkcji.

Pisząc funkcję rekurencyjną, zacznij od decyzji, jak chcesz wyjść z funkcji. Następnie ustal, jak skonfigurować pętlę. Określ, jakie informacje należy wysłać do następnego wywołania funkcji, a co należy zwrócić.

Najlepszym sposobem na nauczenie się rekurencji jest praktykowanie jej i uczenie się na własnych błędach. Spójrz na część swojego starego kodu i rzuć sobie wyzwanie, aby przepisać pętle jako funkcje rekurencyjne. Prawdopodobnie nie poprawi to wydajności kodu, ale będzie to dobra praktyka.


Jak obliczyć wartość nCr

Jak obliczyć wartość nCr

Kombinacja to pojęcie matematyczne. Odnosi się do ułożenia kilku przedmiotów, gdzie ich kolejność nie ma znaczenia. Podstawowa formuła opisuje liczbę prawidłowych kombinacji.

Jak napisać i skompilować swój pierwszy kod Solidity?

Jak napisać i skompilować swój pierwszy kod Solidity?

Solidity to język programowania używany przez inteligentne kontrakty na blockchainie Ethereum. Jest to statyczny, zorientowany obiektowo język programowania.

SQL kontra NoSQL: jaka jest najlepsza baza danych dla twojego następnego projektu?

SQL kontra NoSQL: jaka jest najlepsza baza danych dla twojego następnego projektu?

SQL kontra NoSQL: jaka jest najlepsza baza danych dla twojego następnego projektu?

Jak znaleźć N-cyfrowe idealne sześciany i kwadraty za pomocą Pythona, C++ i JavaScript

Jak znaleźć N-cyfrowe idealne sześciany i kwadraty za pomocą Pythona, C++ i JavaScript

Wielu programistów uwielbia rozwiązywać trudne problemy matematyczne za pomocą kodu. Pomaga wyostrzyć umysł i poprawić umiejętności rozwiązywania problemów. W tym artykule dowiesz się, jak znaleźć najmniejsze i największe n-cyfrowe idealne kwadraty i sześciany za pomocą Pythona, C++ i JavaScript. Każdy przykład zawiera również przykładowe dane wyjściowe dla kilku różnych wartości.

Jak używać Pythona jako kalkulatora wiersza poleceń

Jak używać Pythona jako kalkulatora wiersza poleceń

Chociaż możesz używać kalkulatora graficznego na swoim komputerze, interpreter języka programowania Python może pełnić funkcję kalkulatora biurkowego. Jest to tak popularny żart na temat biegania w społeczności Pythona, że ​​wspomniano o nim w oficjalnym samouczku. Oto, jak używać Pythona jako kalkulatora.

Jak osadzić tweety w swoich postach WordPress

Jak osadzić tweety w swoich postach WordPress

Umieszczanie usług stron trzecich w swoich postach WordPress to ekscytujący sposób na przyciągnięcie zainteresowania odwiedzających. Osadzone treści zawierają również wskazówki wizualne, które ułatwiają skanowanie. WordPress ułatwił dodawanie tego typu treści.

Rozpocznij pracę z notatnikiem Jupyter: samouczek

Rozpocznij pracę z notatnikiem Jupyter: samouczek

Jeśli jesteś początkującym naukowcem zajmującym się danymi, który pracuje z Pythonem lub R, musisz wiedzieć, jak korzystać z Jupyter Notebook. Jest to środowisko IDE typu open source i serwerowe do manipulowania danymi, udostępniania kodu na żywo, a także zarządzania przepływem pracy w nauce o danych.

Kodowanie nie jest dla wszystkich: 9 stanowisk technicznych, które można uzyskać bez niego

Kodowanie nie jest dla wszystkich: 9 stanowisk technicznych, które można uzyskać bez niego

Tech to bez wątpienia branża przyszłości. Jeśli jesteś jednym z milionów młodych dorosłych, którzy mają rozpocząć pierwszy etap swojej kariery, być może zastanawiasz się, co zrobić, jeśli nie lubisz kodować.

7 ważnych poleceń, które pomogą rozpocząć pracę z Pythonem dla początkujących

7 ważnych poleceń, które pomogą rozpocząć pracę z Pythonem dla początkujących

Nauka nowego języka programowania, takiego jak Python, staje się bezproblemowa, jeśli masz kompleksową mapę drogową, szczegółowo opisującą koncepcje, których należy się nauczyć jako początkujący i jak robić dalsze postępy, aby osiągnąć kolejny kamień milowy. Nawet średniozaawansowani programiści powinni często odświeżyć swoje podstawy, aby zbudować dla siebie solidną podstawę.

Twoja pierwsza aplikacja internetowa ASP.NET: jak zacząć

Twoja pierwsza aplikacja internetowa ASP.NET: jak zacząć

ASP.NET to bezpłatna wieloplatformowa platforma firmy Microsoft do tworzenia aplikacji i usług internetowych. Platforma ASP.NET jest rozszerzeniem .NET, platformy programistycznej narzędzi, języków programowania i bibliotek używanych do tworzenia różnych aplikacji.

9 najlepszych alternatyw dla platformy Docker do zarządzania kontenerami

9 najlepszych alternatyw dla platformy Docker do zarządzania kontenerami

Kontenery są bardzo przydatne przy opracowywaniu, wdrażaniu i zarządzaniu oprogramowaniem w środowisku wirtualnym. Docker jest przydatny w procesie konteneryzacji, ale nie jest jedyną platformą. Jeśli szukasz alternatyw dla Dockera, nie szukaj dalej. Ta lista przedstawia niektóre bogate w funkcje i wydajne alternatywy platformy Docker, które można wykorzystać w następnym projekcie.

Czy ARCore lub ARKit są lepsze do tworzenia doświadczeń w rozszerzonej rzeczywistości?

Czy ARCore lub ARKit są lepsze do tworzenia doświadczeń w rozszerzonej rzeczywistości?

Niektóre z najczęściej omawianych aplikacji mobilnych i doświadczeń w dzisiejszych czasach wykorzystują technologię rozszerzonej rzeczywistości. Podczas gdy niektóre z tych doświadczeń mogą działać na praktycznie każdym urządzeniu mobilnym, inne działają tylko na nowszych i droższych modelach. Tworzenie i używanie tych bardziej zaawansowanych środowisk wymaga ARCore i ARKit.

Jak stworzyć nową gałąź w Git

Jak stworzyć nową gałąź w Git

Gałęzie są kluczowe dla koncepcji kontroli wersji w programowaniu, aw szczególności w Git. W tym artykule startowym dowiesz się, czym jest gałąź i jak ją utworzyć przy użyciu wielu różnych narzędzi.

Jak używać instrukcji if w Pythonie?

Jak używać instrukcji if w Pythonie?

Instrukcja if jest siłą napędową programowania logicznego. W rezultacie lepsze zrozumienie Pythona jest znaczącym dodatkiem do twoich umiejętności programowania w Pythonie.

5 najlepszych odznak, które wzmocnią Twoje repozytorium GitHub

5 najlepszych odznak, które wzmocnią Twoje repozytorium GitHub

Odznaki GitHub mogą zwiększyć czytelność repozytorium, zapewniając użytkownikom szybki sposób przechwytywania metryk repozytorium. Plakietki mogą być osadzone w pliku README.md, aby wyjaśnić innym programistom znaczenie i konieczność Twojego projektu. W rezultacie czytelnicy bardzo szybko dowiadują się o repozytorium, sprawdzając dołączone identyfikatory.

Pierwsze kroki z Redis i PHP do szybkiego przechowywania danych

Pierwsze kroki z Redis i PHP do szybkiego przechowywania danych

Popularny silnik pamięci masowej Redis jest doskonałym i niezbędnym narzędziem w każdym arsenale programistów. Silnik pamięci masowej w pamięci umożliwia niezwykle szybkie przechowywanie i pobieranie danych, do imponujących 32 milionów zapytań na sekundę, co czyni go doskonałym uzupełnieniem każdego głównego silnika bazy danych.

Co to jest WYSIWYG?

Co to jest WYSIWYG?

Część magii tworzenia oprogramowania pojawia się, gdy wiersze kodu łączą się w coś więcej niż sumę ich części. Przekonasz się, że gdy próbujesz budować w ten sposób abstrakcyjnie, potrzebujesz trochę kreatywnej wizualizacji. Może to dotyczyć przetwarzania tekstu lub projektowania stron internetowych, podobnie jak w przypadku programowania.

Jak zainstalować .NET Framework w wersji 3.5 w systemie Windows 10?

Jak zainstalować .NET Framework w wersji 3.5 w systemie Windows 10?

Jako użytkownik systemu Windows prawdopodobnie przynajmniej raz natknąłeś się na słowa .NET Framework. Jest to platforma oprogramowania opracowana przez firmę Microsoft, która umożliwia tworzenie i uruchamianie programów w językach C#, C++, F# i Visual Basic. Najnowsza wersja platformy .NET to 4,8, ale Twój komputer może wymagać starszej wersji platformy .NET (np. .NET 3.5) do uruchamiania niektórych aplikacji.

WordPress kontra Wix: kluczowe różnice

WordPress kontra Wix: kluczowe różnice

Budując stronę internetową dla siebie lub swojej firmy często stajesz przed klasycznym dylematem. WordPress vs. Wix — który wybrać i jaki byłby dla Ciebie najlepszy?

10 najlepszych dystrybucji Linuksa dla programistów

10 najlepszych dystrybucji Linuksa dla programistów

Chociaż Linux może nie być ulubionym systemem operacyjnym dla zwykłych użytkowników, jest to wybór dla większości programistów i programistów. Linux jest bardziej praktycznym systemem operacyjnym, który został specjalnie zaprojektowany z myślą o programowaniu i programistach.

Jak obliczyć wartość nCr

Jak obliczyć wartość nCr

Kombinacja to pojęcie matematyczne. Odnosi się do ułożenia kilku przedmiotów, gdzie ich kolejność nie ma znaczenia. Podstawowa formuła opisuje liczbę prawidłowych kombinacji.

Jak napisać i skompilować swój pierwszy kod Solidity?

Jak napisać i skompilować swój pierwszy kod Solidity?

Solidity to język programowania używany przez inteligentne kontrakty na blockchainie Ethereum. Jest to statyczny, zorientowany obiektowo język programowania.

SQL kontra NoSQL: jaka jest najlepsza baza danych dla twojego następnego projektu?

SQL kontra NoSQL: jaka jest najlepsza baza danych dla twojego następnego projektu?

SQL kontra NoSQL: jaka jest najlepsza baza danych dla twojego następnego projektu?

Jak znaleźć N-cyfrowe idealne sześciany i kwadraty za pomocą Pythona, C++ i JavaScript

Jak znaleźć N-cyfrowe idealne sześciany i kwadraty za pomocą Pythona, C++ i JavaScript

Wielu programistów uwielbia rozwiązywać trudne problemy matematyczne za pomocą kodu. Pomaga wyostrzyć umysł i poprawić umiejętności rozwiązywania problemów. W tym artykule dowiesz się, jak znaleźć najmniejsze i największe n-cyfrowe idealne kwadraty i sześciany za pomocą Pythona, C++ i JavaScript. Każdy przykład zawiera również przykładowe dane wyjściowe dla kilku różnych wartości.

Jak używać Pythona jako kalkulatora wiersza poleceń

Jak używać Pythona jako kalkulatora wiersza poleceń

Chociaż możesz używać kalkulatora graficznego na swoim komputerze, interpreter języka programowania Python może pełnić funkcję kalkulatora biurkowego. Jest to tak popularny żart na temat biegania w społeczności Pythona, że ​​wspomniano o nim w oficjalnym samouczku. Oto, jak używać Pythona jako kalkulatora.

Jak osadzić tweety w swoich postach WordPress

Jak osadzić tweety w swoich postach WordPress

Umieszczanie usług stron trzecich w swoich postach WordPress to ekscytujący sposób na przyciągnięcie zainteresowania odwiedzających. Osadzone treści zawierają również wskazówki wizualne, które ułatwiają skanowanie. WordPress ułatwił dodawanie tego typu treści.

Rozpocznij pracę z notatnikiem Jupyter: samouczek

Rozpocznij pracę z notatnikiem Jupyter: samouczek

Jeśli jesteś początkującym naukowcem zajmującym się danymi, który pracuje z Pythonem lub R, musisz wiedzieć, jak korzystać z Jupyter Notebook. Jest to środowisko IDE typu open source i serwerowe do manipulowania danymi, udostępniania kodu na żywo, a także zarządzania przepływem pracy w nauce o danych.

Kodowanie nie jest dla wszystkich: 9 stanowisk technicznych, które można uzyskać bez niego

Kodowanie nie jest dla wszystkich: 9 stanowisk technicznych, które można uzyskać bez niego

Tech to bez wątpienia branża przyszłości. Jeśli jesteś jednym z milionów młodych dorosłych, którzy mają rozpocząć pierwszy etap swojej kariery, być może zastanawiasz się, co zrobić, jeśli nie lubisz kodować.

7 ważnych poleceń, które pomogą rozpocząć pracę z Pythonem dla początkujących

7 ważnych poleceń, które pomogą rozpocząć pracę z Pythonem dla początkujących

Nauka nowego języka programowania, takiego jak Python, staje się bezproblemowa, jeśli masz kompleksową mapę drogową, szczegółowo opisującą koncepcje, których należy się nauczyć jako początkujący i jak robić dalsze postępy, aby osiągnąć kolejny kamień milowy. Nawet średniozaawansowani programiści powinni często odświeżyć swoje podstawy, aby zbudować dla siebie solidną podstawę.

Twoja pierwsza aplikacja internetowa ASP.NET: jak zacząć

Twoja pierwsza aplikacja internetowa ASP.NET: jak zacząć

ASP.NET to bezpłatna wieloplatformowa platforma firmy Microsoft do tworzenia aplikacji i usług internetowych. Platforma ASP.NET jest rozszerzeniem .NET, platformy programistycznej narzędzi, języków programowania i bibliotek używanych do tworzenia różnych aplikacji.