Gdzie mogę znaleźć jakieś zadanka związane z rekurencją?
aby wiedzieć jak działa rekursja musisz wiedzieć jak działa wywołanie i powrót funkcji z poziomu asemblera tzn: ramka stosu, zmienne lokalne na stosie, adres powrotu:
http://unixwiz.net/techtips/win32-callconv-asm.html
http://www.csee.umbc.edu/~chang/cs313.s02/stack.shtml
Jak to zrozumiesz to będziesz pisał programy rekurencyjne jakie ci się tylko podoba....
@mały Lew - bzdura, nawet uczniowie szkół średnich potrafią korzystać z rekurencji, choć nie mają pojęcia o tym, co się dzieje pod spodem; Aby móc skorzystać z rekursji, wystarczy odpowiednio przemyśleć działanie kolejnych samowywołań - i tyle; Oczywiście wiedza na temat niskopoziomowych zabiegów nie zaszkodzi, jednak tak jak napisałem wyżej - nie jest to obowiązek;
@pijany Szczur - nie musisz ich szukać; Na pewno nie raz używałeś już pętli, więc weź sobie każdy taki przypadek i wspomniane pętle zamień na rekursję; To na początek, potem możesz się pobawić trochę różnymi drzewami, do których obsługi rekurencja jest bardzo przydatna.
furious programming napisał(a):
@pijany Szczur - nie musisz ich szukać; Na pewno nie raz używałeś już pętli, więc weź sobie każdy taki przypadek i wspomniane pętle zamień na rekursję; To na początek, potem możesz się pobawić trochę różnymi drzewami, do których obsługi rekurencja jest bardzo przydatna.
Zwykle kolejność jest odwrotna:
- przyjemna i elegancka funkcja rekurencyjna
- n > 1000, przepełnienie stosu lub dramatycznie wolne przetwarzanie (patrz np. Fibonacci)
- konwersja do rekurencji ogonowej
- nic nie daje? konwersja do iteracji (uwaga dla OP: przetwarzanie w pętli)
http://www.codeproject.com/Articles/21194/Iterative-vs-Recursive-Approaches
http://www.refactoring.com/catalog/replaceRecursionWithIteration.html
https://secweb.cs.odu.edu/~zeil/cs361/web/website/Lectures/recursionConversion/page/recursionConversion.html
https://web.archive.org/web/20120227170843/http://cs.saddleback.edu/rwatkins/CS2B/Lab%20Exercises/Stacks%20and%20Recursion%20Lab.pdf
http://www.programcreek.com/2012/10/iteration-vs-recursion-in-java/
http://stackoverflow.com/questions/159590/way-to-go-from-recursion-to-iteration?rq=1
Edit: jeszcze przydatna jest znajość techniki "memoization" (cache'owanie wyliczeń):
https://linanqiu.github.io/2015/12/10/Memoization-Recursion-Dynamic-Programming/
http://interactivepython.org/runestone/static/pythonds/Recursion/DynamicProgramming.html
@vpiotr, ja nie opisałem cyklu produkcyjnego - podałem jedynie pomysł na zwiększenie wachlarza zadań.
Zrób drzewko plików danego katalogu (w sensie niech pokazuje wszystkie pliki i katalogi wgłąb). To realny problem, który można rozwiązać za pomocą rekurencji, a nie jakieś silnie.
A ja polecam puzzle logiczne np. Sudoku, Magiczny Kwadrat.