Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 09:12

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



factorials

Discussion on factorials within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Sep 2010
Posts: 24
Received Thanks: 2
factorials

hallo
Kann mir bitte jemand den code hier erklären?

Code:
#include <iostream> 
const int ArSize =16; 
int main() 
{ 
long long factorials[ArSize]; 
factorials [1] = factorials[0] = 1LL;

for (int i = 2; i < ArSize; i++ ) 
factorials[i] = i * factorials[i-1]; 

for (int i = 0; i < ArSize; i++ ) 
std::cout << i << " ! = " << factorials [i] << std::endl; 

return 0; 
};
Das kommt raus:
0! = 1
1! = 1
2! = 2
3! = 6
4! = 24
usw. bis
15! = 1307674368000


for (int i = 2; i< ArSize; i++)
factorials[i] = i * factorials[i-1];

Also 2< 16 TRUE und dann geht die 2 auf factorials[i] also factorials[2]=
2 * factorials[2-1]; oder ? Wenn ja was passiert hier: 2 * factorials[2-1]
Was wird da ausgerechnet? 2-1 im array und dann *2 WTF ! Zb. 2-1 ist ja dann 1 und *2 ist ja 2 ok 2! =2.Das gleiche nochmal mit 3. [3-1] *3=6 gut 3! = 6. Aber bei 4 geht das nicht mehr [4-1] *4= 12 ...
Man muss ja immer so rechnen 3! * 2= 6 -> 4!*6=24 usw.

Kann mir bitte jemand das hier erklären? Wie funktionierts!?

Danke
ExHack is offline  
Old 12/25/2012, 15:12   #2

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
Der Spaß ist ja die n-Fakultät. Die berechnet man durch ZAHL * (Fakultät von ZAHL-1), für 5 also 5! = 5 * (4!) = 5! = 5 * 4 * 3 * 2 * 1. Das ganze kann man übrigens auch wunderschön via Rekursion lösen. Naja:

Ich glaube, du hast nicht ganz verstanden, wie Arrays funktionieren. factorials[i - 1] bedeutet nicht, dass da jetzt der Wert von i - 1 steht, du zeigst da im Prinzip auf die Zahl, die du im vorherigen Durchlauf errechnet hast.

factorials[2] = 2 * factorials[1] -> schau mal in die oberen Zeilen: factorials [1] = 1LL;

für i = 3:

factorials[3] = 3 * factorials[3 - 1] -> das ist jetzt nicht 3 * 2, weil da 3 - 1 steht, das ist 3 * 2, weil du im vorherigen Durchlauf der Schleife beim Index 2 des Arrays die 2 reingeschrieben hast. factorials[3] ist jetzt also 3 * 2 = 6.

für i = 4:

factorials[4] = 4 * factorials[4 - 1] -> also 4 * factorials[3]. Das ist jetzt nicht 4 * 3, weil da eine 3 in den Klammern steht, das ist 4 * das, was im vorherigen Schritt rausgekommen ist, also 4 * 6 = 24.

usw.

Beschäftige dich mal damit, was ein Array ist und wie es funktioniert, dann wird dir evtl. einiges verständlicher.
snow is offline  
Thanks
1 User
Old 12/26/2012, 17:29   #3
 
elite*gold: 9
Join Date: Dec 2009
Posts: 1,071
Received Thanks: 819
Falls es dir hilft. Rekursiv ist es einfacher zu verstehen...

Code:
int fak(int n)
{
	if (n==0) return 1;
	else return n*fak(n-1);
}
.Infinite is offline  
Thanks
1 User
Old 12/26/2012, 18:47   #4
 
.SkyneT.'s Avatar
 
elite*gold: 273
Join Date: Sep 2010
Posts: 1,831
Received Thanks: 786
Quote:
Originally Posted by .Infinite View Post
Falls es dir hilft. Rekursiv ist es einfacher zu verstehen...
Wenn man die Funktionsweise der Rekursion kennt, ja.
Sonst wohl eher nicht

Aber wie schon gesagt wird hier nur die Fakultät berechnet.
0! = 1
1! = 1
2! = 1 * 2
3! = 1 * 2 * 3
4! = 1 * 2 * 3 * 4
5! = 1 * 2 * 3 * 4 * 5
.....
.SkyneT. is offline  
Thanks
1 User
Reply




All times are GMT +1. The time now is 09:13.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.