StartAlgorytmyAlgorytmy arytmetyczneSilnia
Baza Wiedzy
Wersja offline serwisu przeznaczona na urządzenia z systemem Android.

Darowizny
darowiznaWspomóż rozwój serwisu


Nagłówki RSS
Kanał artykuły
Kanał implementacje
Kanał komentarze
Kanał forum


Bookmarki









Sonda
Implementacji w jakim języku programowania poszukujesz?
 
Silnia
Ocena użytkowników:+++-- / 28
SłabyŚwietny 
Wpisany przez Michał Knasiecki
wtorek, 26 lipca 2005 20:33
Silnia (n!) to iloczyn n kolejnych liczb naturalnych, przy czym dodatkowo zachodzi 0! = 1.
Obliczanie silni jest sztandarowym przykładem używania rekurencji:
n! = n * (n-1)!

Rekurencyjne obliczanie silni może być opisane następującym schematem blokowym:
schemat blokowy silni (rekurencyjnie)
Przykład:
5!=5*4!=5*4*3!=5*4*3*2!=5*4*3*2*1!=5*4*3*2*1*0!=5*4*3*2*1*1=120

Jak można zauważyć po rozpisaniu silnię można obliczyć również z użyciem algorytmu iteracyjnego:
n! = 1 * 2 * 3 * ... n
Przy czym cały czas należy pamiętać o wyjątku dla 0! = 1.

Iteracyjne obliczanie silni może być opisane następującym schematem blokowym:
schemat blokowy silni (iteracyjnie)


Złożoność obliczeniowa przedstawionych metod to O(n).



Autor Język programowania Komentarz Otwórz Pobierz Ocena
Tomasz Lubiński Ada
Implementacja w Ada
Implementacja w Ada
+++-- / 5
Tomasz Lubiński C# MS Visual Studio .net
Implementacja w C#
Implementacja w C#
+++-- / 5
Tomasz Lubiński C/C++
Implementacja w C/C++
Implementacja w C/C++
+++-- / 3
Marian C/C++ C++ - silnia rekurencyjnie
Implementacja w C/C++
Implementacja w C/C++
++--- / 4
Marian C/C++ C++ - silnia iteracyjnie
Implementacja w C/C++
Implementacja w C/C++
+++-- / 1
Adrian Wijas C/C++ C++ - rekurencyjnie
Implementacja w C/C++
Implementacja w C/C++
++--- / 2
Adrian Wijas C/C++ C++ - iteracyjnie
Implementacja w C/C++
Implementacja w C/C++
----- / 0
Bartosz Bednarczyk C/C++ C++ Wersja iteracyjna dla dużych liczb
Implementacja w C/C++
Implementacja w C/C++
+++++ / 2
Michał Knasiecki Delphi/Pascal Borland Delphi 5
Implementacja w Delphi/Pascal
Implementacja w Delphi/Pascal
++--- / 4
Tomasz Lubiński Java
Implementacja w Java
Implementacja w Java
+---- / 6
ddominikp Php Iteracyjnie
Implementacja w Php
Implementacja w Php
+---- / 2
Adrian Dymek Python
Implementacja w Python
Implementacja w Python
++++- / 37
 
Dodaj własną implementację tego algorytmu
  • Zaloguj się na stronie
Plik:
Język programowania:
Komentarz:
  By móc dodać implementacje zaloguj się na stronie



Poprawiony: wtorek, 21 czerwca 2011 19:07

Komentarze

 
photo
0 # qebek 2010-02-10 11:41
wszystko ok ale niema bloku wprowadzającego n
Odpowiedz | Odpowiedz z cytatem | Cytować
 
 
photo
+2 # Tomasz Lubiński 2010-02-13 14:59
Blok wprowadzający dane, nie jest obowiązkowy. Jeżeli nie chcesz zaciemniać algorytmu i skupić się tylko na jego istocie możesz założyć, że dane są już wprowadzone go pominąć. Podsumowywując, obie wersje są poprawne.
Odpowiedz | Odpowiedz z cytatem | Cytować
 

Dodaj komentarz

Kod antysapmowy
Odśwież