Mikä on luvun tekijä?
- Ei-negatiivisen kokonaisluvun faktoraali on kaikkien positiivisten kokonaislukujen kertolasku, jotka ovat pienempiä tai yhtä suuria kuin n. Esimerkiksi 6:n faktoriaali on 6*5*4*3*2*1, joka on 720.
- Faktoriaa edustaa numero ja ! merkki lopussa. Sitä käytetään laajasti permutaatioissa ja yhdistelmissä mahdollisten kokonaistulosten laskemiseen. Ranskalainen matemaatikko Christian Kramp käytti ensin huutomerkkiä.

Luodaan tekijäohjelma käyttämällä rekursiivisia funktioita. Kunnes arvo ei ole yhtä suuri kuin nolla, rekursiivinen funktio kutsuu itseään. Faktoriaali voidaan laskea käyttämällä seuraavaa rekursiivista kaavaa.
n! = n * (n - 1)!
n! = 1, jos n = 0 tai n = 1
Alla toteutus:
C++
// C++ program to find> // factorial of given number> #include> using> namespace> std;> > // Function to find factorial> // of given number> unsigned>int> factorial(unsigned>int> n)> > >if> (n == 0> > // Driver code> int> main()> {> >int> num = 5;> >cout <<>'Factorial of '> ><< num <<>' is '> << factorial(num) << endl;> >return> 0;> }> // This code is contributed by Shivi_Aggarwal> |
>
pöydät lateksia
>
C
// C program to find factorial of given number> #include> > // function to find factorial of given number> unsigned>int> factorial(unsigned>int> n)> {> >if> (n == 0)> >return> 1;> >return> n * factorial(n - 1);> }> > int> main()> {> >int> num = 5;> >printf>(>'Factorial of %d is %d'>, num, factorial(num));> >return> 0;> }> |
>
>
Java
// Java program to find factorial of given number> class> Test {> >// method to find factorial of given number> >static> int> factorial(>int> n)> >{> >if> (n ==>0>)> >return> 1>;> > >return> n * factorial(n ->1>);> >}> > >// Driver method> >public> static> void> main(String[] args)> >{> >int> num =>5>;> >System.out.println(>'Factorial of '> + num> >+>' is '> + factorial(>5>));> >}> }> |
>
>
Python 3
# Python 3 program to find> # factorial of given number> > # Function to find factorial of given number> def> factorial(n):> > >if> n>=>=> 0>:> >return> 1> > >return> n>*> factorial(n>->1>)> > # Driver Code> num>=> 5>;> print>(>'Factorial of'>, num,>'is'>,> factorial(num))> > # This code is contributed by Smitha Dinesh Semwal> |
>
>
C#
// C# program to find factorial> // of given number> using> System;> > class> Test {> >// method to find factorial> >// of given number> >static> int> factorial(>int> n)> >{> >if> (n == 0)> >return> 1;> > >return> n * factorial(n - 1);> >}> > >// Driver method> >public> static> void> Main()> >{> >int> num = 5;> >Console.WriteLine(>'Factorial of '> >+ num +>' is '> + factorial(5));> >}> }> > // This code is contributed by vt_m> |
>
>
PHP
// PHP program to find factorial // of given number // function to find factorial // of given number function factorial($n) { if ($n == 0) return 1; return $n * factorial($n - 1); } // Driver Code $num = 5; echo 'Factorial of ', $num, ' is ', factorial($num); // This code is contributed by m_kit ?>>> |
>
>// Javascript to find factorial>// of given number>>// function to find factorial>// of given number>function>factorial(n) {>>if>(n == 0)>return>1;>>return>n * factorial(n - 1);>}>>// Driver Code>let num = 5;>document.write(>'Factorial of '>+ num +>' is '>+ factorial(num));>>// This code is contributed by Saurabh Jaiswal>>>>>LähtöFactorial of 5 is 120>Aika monimutkaisuus: Päällä)
Aputila: Päällä)Iteratiivinen ratkaisu luvun kertoimen löytämiseksi:
Faktoriaali voidaan laskea myös iteratiivisesti, koska rekursio voi olla kallista suurille luvuille. Tässä olemme näyttäneet iteratiivisen lähestymistavan käyttämällä sekä for- että while-silmukoita.
Lähestymistapa 1: For-silmukan käyttö
Ratkaise ongelma noudattamalla ohjeita:
- For-silmukan avulla kirjoitetaan ohjelma luvun kertoimen löytämiseksi.
- Ohjelmassa käytetään kokonaislukumuuttujaa, jonka arvo on 1.
- Jokaisella iteraatiolla arvo kasvaa yhdellä, kunnes se on yhtä suuri kuin käyttäjän syöttämä arvo.
- Käyttäjän syöttämän luvun tekijä on tosiasiamuuttujan lopullinen arvo.
Alla on yllä olevan lähestymistavan toteutus:
C++
merkkijono c
// C++ program for factorial of a number>#include>using>namespace>std;>>// function to find factorial of given number>unsigned>int>factorial(unsigned>int>n)>{>>int>res = 1, i;>>for>(i = 2; i <= n; i++)>>res *= i;>>return>res;>}>>// Driver code>int>main()>{>>int>num = 5;>>cout <<>'Factorial of '>><< num <<>' is '>><< factorial(num) << endl;>>return>0;>}>>// This code is contributed by Shivi_Aggarwal>>>C
#include>>// function to find factorial of given number>unsigned>int>factorial(unsigned>int>n)>{>>int>res = 1, i;>>for>(i = 2; i <= n; i++)>>res *= i;>>return>res;>}>>int>main()>{>>int>num = 5;>>printf>(>>'Factorial of %d is %d'>, num, factorial(num));>>return>0;>}>>>Java
// Java program to find factorial of given number>class>Test {>>>// Method to find factorial of the given number>>static>int>factorial(>int>n)>>{>>int>res =>1>, i;>>for>(i =>2>; i <= n; i++)>>res *= i;>>return>res;>>}>>>// Driver method>>public>static>void>main(String[] args)>>{>>int>num =>5>;>>System.out.println(>>'Factorial of '>+ num>>+>' is '>+ factorial(>5>));>>}>}>>>Python 3
# Python 3 program to find># factorial of given number>># Function to find factorial of given number>def>factorial(n):>>>res>=>1>>>for>i>in>range>(>2>, n>+>1>):>>res>*>=>i>>return>res>># Driver Code>num>=>5>;>print>(>'Factorial of'>, num,>'is'>,>factorial(num))>># This code is contributed by Smitha Dinesh Semwal>>>C#
// C# program to find>// factorial of given number>using>System;>>class>Test {>>// Method to find factorial>>// of given number>>static>int>factorial(>int>n)>>{>>int>res = 1, i;>>>for>(i = 2; i <= n; i++)>>res *= i;>>return>res;>>}>>>// Driver method>>public>static>void>Main()>>{>>int>num = 5;>>Console.WriteLine(>>'Factorial of '>+ num>>+>' is '>+ factorial(5));>>}>}>>// This code is contributed by vt_m>>>PHP
// function to find factorial // of given number function factorial( $n) { $res = 1; $i; for ($i = 2; $i <= $n; $i++) $res *= $i; return $res; } // Driver Code $num = 5; echo 'Factorial of ', $num, ' is ', factorial($num); // This code is contributed // by anuj_67. ?>>>>
>// JavaScript program to find factorial of given number>>>// Method to find factorial of the given number>>function>factorial(n)>>{>>var>res = 1, i;>>for>(i = 2; i <= n; i++)>>res *= i;>>return>res;>>}>>>// Driver method>>>var>num = 5;>>document.write(>'Factorial of '>+ num +>' is '>+ factorial(5));>>>// This code is contributed by shivanisinghss2110.>>>>>LähtöFactorial of 5 is 120>Aika monimutkaisuus: Päällä)
Aputila: O(1)Lähestymistapa 2: Tässä esimerkissä käytetään while-silmukkaa algoritmin toteuttamiseen ja tekijäohjelman löytämiseen.
C
merkkijono päivämäärään muuntaa
// C program for factorial of a number>#include>>// function to find factorial of given number>unsigned>int>factorial(unsigned>int>n)>{>>if>(n == 0)>>return>1;>>int>i = n, fact = 1;>>while>(n / i != n) {>>fact = fact * i;>>i--;>>}>>return>fact;>}>>int>main()>{>>int>num = 5;>>printf>(>'Factorial of %d is %d'>, num, factorial(num));>>return>0;>}>>>C++
// C++ program for factorial of a number>#include>using>namespace>std;>>// function to find factorial of given>// number using while loop>unsigned>int>factorial(unsigned>int>n)>{>>if>(n == 0)>>return>1;>>int>i = n, fact = 1;>>while>(n / i != n) {>>fact = fact * i;>>i--;>>}>>return>fact;>}>>// Driver code>int>main()>{>>int>num = 5;>>cout <<>'Factorial of '>><< num <<>' is '>><< factorial(num) << endl;>>return>0;>}>// This code is contributed by Shivi_Aggarwal>>>Java
// Java program to find factorial of given number>>class>Test {>>>// Method to find factorial of the given number>>static>int>factorial(>int>n)>>{>>if>(n ==>0>)>>return>1>;>>int>i = n, fact =>1>;>>while>(n / i != n) {>>fact = fact * i;>>i--;>>}>>return>fact;>>}>>>// Driver method>>public>static>void>main(String[] args)>>{>>int>num =>5>;>>System.out.println(>>'Factorial of '>+ num>>+>' is '>+ factorial(>5>));>>}>}>>>Python 3
# Python 3 program to find># factorial of given number>># Function to find factorial of given number>def>factorial(n):>>if>(n>=>=>0>):>>return>1>>i>=>n>>fact>=>1>>>while>(n>/>i !>=>n):>>fact>=>fact>*>i>>i>->=>1>>>return>fact>># Driver Code>num>=>5>;>print>(>'Factorial of'>, num,>'is'>,>factorial(num))>># This code is contributed by Smitha Dinesh Semwal>>>C#
// C# program to find>// factorial of given number>using>System;>>class>Test {>>// Method to find factorial>>// of given number>>static>int>factorial(>int>n)>>{>>if>(n == 0)>>return>1;>>int>i = n, fact = 1;>>while>(n / i != n) {>>fact = fact * i;>>i--;>>}>>return>fact;>>}>>>// Driver method>>public>static>void>Main()>>{>>int>num = 5;>>Console.WriteLine(>>'Factorial of '>+ num>>+>' is '>+ factorial(5));>>}>}>>>Javascript
>>// JavaScript Program to implement>>// the above approach>>// function to find factorial of given>>// number using while loop>>function>factorial(n) {>>if>(n == 0)>>return>1;>>let i = n, fact = 1;>>while>(Math.floor(n / i) != n) {>>fact = fact * i;>>i--;>>}>>return>fact;>>}>>>// Driver code>>let num = 5;>>document.write(>'Factorial of '>>+ num +>' is '>>+ factorial(num) +>' '>);>>// This code is contributed by Potta Lokesh>>>>>>LähtöFactorial of 5 is 120>Aika monimutkaisuus: PÄÄLLÄ)
Aputila: O(1)Lähestymistapa 3: A kolmiosainen operaattori voidaan ajatella lyhenteenä if…else-lauseeseen. Ehdot on annettu sekä niiden perusteella suoritettavat lausunnot. Tässä on ohjelma kolmiosaisen operaattorin avulla.
C++
// C++ program to find factorial of given number>#include>using>namespace>std;>>int>factorial(>int>n)>>>// single line to find factorial>>return>(n == 1>>// Driver Code>int>main()>{>>int>num = 5;>>cout <<>'Factorial of '><< num <<>' is '><< factorial(num);>>return>0;>}>>// This code is contributed by shivanisinghss2110>array.sort javassa>>C
// C++ program to find factorial of given number>#include>>int>factorial(>int>n)>n == 0) ? 1 : n * factorial(n - 1);>>>// Driver Code>int>main()>{>>int>num = 5;>>printf>(>'Factorial of %d is %d'>, num, factorial(num));>>return>0;>}>>// This code is contributed by Rithika palaniswamy.>>>Java
// Java program to find factorial>// of given number>class>Factorial {>>>int>factorial(>int>n)>>n ==>0>) ?>1>: n * factorial(n ->1>);>>>>>// Driver Code>>public>static>void>main(String args[])>>{>>Factorial obj =>new>Factorial();>>int>num =>5>;>>System.out.println(>>'Factorial of '>+ num>>+>' is '>+ obj.factorial(num));>>}>}>>// This code is contributed by Anshika Goyal.>>>Python 3
# Python 3 program to find># factorial of given number>>def>factorial(n):>>># single line to find factorial>>return>1>if>(n>=>=>1>or>n>=>=>0>)>else>n>*>factorial(n>->1>)>>># Driver Code>num>=>5>print>(>'Factorial of'>, num,>'is'>,>>factorial(num))>># This code is contributed># by Smitha Dinesh Semwal.>>>C#
// C# program to find factorial>// of the given number>using>System;>>class>Factorial {>>>int>factorial(>int>n)>>>>>// Driver Code>>public>static>void>Main()>>{>>Factorial obj =>new>Factorial();>>int>num = 5;>>>Console.WriteLine(>>'Factorial of '>+ num>>+>' is '>+ obj.factorial(num));>>}>}>>// This code is contributed by vt_m.>>>PHP
// PHP program to find factorial // of given number function factorial( $n) $n == 0) ? 1: $n * factorial($n - 1); // Driver Code $num = 5; echo 'Factorial of ', $num, ' is ', factorial($num); // This code is contributed by anuj_67. ?>>>>
>>// JavaScript program to find factorial of given number>function>factorial(n)>>>// Driver Code>>>var>num = 5;>>document.write(>'Factorial of '>+num +>' is '>+ factorial(num));>>// This code is contributed by shivanisinghss2110.>>>>>Lähtölivecricket.isFactorial of 5 is 120>Aika monimutkaisuus: Päällä)
Aputila: Päällä)Ongelmia factorial-koodin kirjoittamisessa
Kun n:n arvo muuttuu 1:llä, faktoriaalin arvo kasvaa n:llä. Joten faktoriaalin arvon tallentavan muuttujan tulisi olla suuri. Seuraavassa on n:n arvo, jonka tekijä voidaan tallentaa vastaavassa koossa.
1. kokonaisluku –> n<=12
2. pitkä pitkä int –> n<=19
Yllä olevasta tiedosta voidaan nähdä, että n:n arvo voidaan laskea hyvin pieni tekijäfunktion nopeamman kasvun vuoksi. Voimme kuitenkin löytää suurempien arvojen faktoriaalin mod-arvon ottamalla mod jokaisessa vaiheessa.
Yllä oleva ratkaisu aiheuttaa ylivuotoa suurille määrille. Katso suurten lukujen faktoraalia ratkaisua varten, joka toimii suurille numeroille.
Kirjoita kommentteja, jos löydät virheen yllä olevasta koodista/algoritmista tai etsi muita tapoja ratkaista sama ongelma.