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!

One thought to “Jak obliczyć silnie? – Java”

  1. //silnia metodą iteracji
    public class Silnia {
    public static int silnia(int n) {
    int iloczyn = 1;
    for(int i = 1; i <= n; i++) {
    iloczyn *= i;
    }
    return iloczyn;
    }
    public static void main(String[] args) {
    System.out.println(silnia(0));
    System.out.println(silnia(1));
    System.out.println(silnia(2));
    System.out.println(silnia(3));
    System.out.println(silnia(4));
    System.out.println(silnia(5));
    }
    }

Dodaj komentarz

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