Jak obliczyć silnie? – Java

Dzisiaj kolejny z kilku wpisów czekających na akceptacje przeniesionych z bloga (2012 rok). Jeśli zastanawiasz się jak obliczyć silnie w Javie (gotowy kod źródłowy funkcji) to dobrze trafiłeś! Jedna funkcja silny Java (factorial in java) została została zaimplementowana  za pomocą iteracji w pętli for, druga natomiast rekurencyjnie. Obie funkcje przyjmują parametr n. Dla osób programujących w językach C pochodnych, przepisanie tej funkcji nie sprawi żadnego problemu. Które lepsze rozwiązanie? Sami zadecydujcie. Nie będę się rozwodził czym jest silnia, od razu przejdę do rozwiązania problemu.

Jak obliczyć silnie – rozwiązanie iteracyjnie:

Java, silnia – rozwiązanie rekurencyjne:

Które rozwiązanie lepsze? Jak się okazuje rekurencyjne choć w naturalny sposób czytelniejsze dla programisty jest wolniejsze. Wiąże się to z przekazywaniem parametrów poprzez stos i pamiętaniem ich w tzn kontekście w pamięci. Upraszczając, żeby obliczyć silnie rekurencyjnie musimy przejść przez wszystkie wywołania dla różnych wartości by obliczyć końcowy iloczyn czyli silnie. Wystarczy spojrzeć na czasy i wywołania w NetBeans dla parametru n=25… O ile potraficie używać profilera :-). Pozdrawiamy!




Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *