Cwiczenia na funkcje rekurencyjne

0

Gdzie mogę znaleźć jakieś zadanka związane z rekurencją?

0

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....

1

@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.

0
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

0

@vpiotr, ja nie opisałem cyklu produkcyjnego - podałem jedynie pomysł na zwiększenie wachlarza zadań.

1

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.

0

A ja polecam puzzle logiczne np. Sudoku, Magiczny Kwadrat.

1 użytkowników online, w tym zalogowanych: 0, gości: 1