Kezdőoldal » Számítástechnika » Programozás » Faktoriális, miért így működik...

Faktoriális, miért így működik Java-ban?

Figyelt kérdés

public static long factorial(int n)

{

long multi = 1;

for (int i = 1; i <= n; i++) {

multi = multi * i;

}

return multi;


Ebből azt látom, h így működik:

multi az 1 végig

for ciklusban az i 1-el kezdődik

majd mindig növekszik 1-el n értékéig (legyen n=5)

majd összeszorozza az 1-et az i vel

1*1, 1*2, 1*3, 1*4, 1*5

lesz 1,2,3,4,5 -->Ebből miért csinál szorszást?


Mert a multi = multi * i, nekem csak annyi jön, le, h 1-el szorozza az i-t, amíg i el nem éri n értékét, de a faktoriálisnál a kapott számokat még össze kell szorozni. Tehát az nem világos, h én úgy értelmezem ezt, h azt adja, h 1,2,3,4,5 és ebből miért lesz 1*2*3*4*5


n=5 esetén konkrétan számokkal levezetve, melyik parancsnál mit csinál, hogy fut le?


Köszi!



2017. szept. 24. 12:55
 1/8 anonim ***** válasza:
100%

A multi nem 1 végigl. Ebben a sorban:


multi = multi * i;


minden iterációban felülíródik az értéke. Tehát mindig a multi aktuális értékét szorozza össze az i-vel, és az eredményt eltárolja a multi-ban.

2017. szept. 24. 13:12
Hasznos számodra ez a válasz?
 2/8 A kérdező kommentje:

Akkor a "multi" is és az "i" is 1-el nő mindig?

Ha n=5

1.

1*1

2.

2*2

3.

3*3

4.

4*4

5.

5*5


Ez így nem jó, mert n=5 esetén 120 az redmény.


Le tudnád vagy tudná írni valaki n=5 esetén, mikor mennyi a multi, az n és az i.

Elején vagyok a dolgoknak, nehéz elképzelni.


Nagyon köszönöm.

2017. szept. 24. 13:17
 3/8 anonim ***** válasza:
100%

#1 vagyok, levezetem neked n = 5 esetén, ahogy kérted.


multi = 1, i = 1: multi új értéke = 1 * 1 = 1

multi = 1, i = 2: multi új értéke = 1 * 2 = 2

multi = 2, i = 3: multi új értéke = 2 * 3 = 6

multi = 6, i = 4: multi új értéke = 6 * 4 = 24

multi = 24, i = 5: multi új értéke = 24 * 5 = 120


A végén tehát a return multi a 120-as értéket adja vissza.

2017. szept. 24. 13:19
Hasznos számodra ez a válasz?
 4/8 sharkxxx ***** válasza:

A "multi = multi * i" parancsnál először kiértékelődik az = jel jobb oldalán levő rész (multi * i = érték), majd ez az érték el kesz mentve a "multi =" értékadással a "multi" változóba (multi = érték).


multi = 1

multi = multi * 1; // 1 * 1 = 1 -> multi = 1

multi = multi * 2; // 1 * 2 = 2 -> multi = 2

multi = multi * 3; // 2 * 3 = 6 -> multi = 6

multi = multi * 4; // 6 * 4 = 24 -> multi = 24

multi = multi * 5; //24 * 5 =120 -> multi =120

2017. szept. 24. 13:21
Hasznos számodra ez a válasz?
 5/8 anonim ***** válasza:
A multi mindig i-szeresére nő, nem 1-gyel.
2017. szept. 24. 13:29
Hasznos számodra ez a válasz?
 6/8 A kérdező kommentje:

Nagyon köszönöm. Így már értem, nem volna rossz, ha iskolában is így elmagyaráznák...


Van valami könyv vagy net-es forrás, ahol ezek mint ez a faktoriális, prím stb ilyen részeltesen le vannak írva, vezetve, mint, ahogy leírtátok?

2017. szept. 24. 13:42
 7/8 anonim ***** válasza:
Ilyen forrás nincs, de te magad is végig tudod követni az egyes utasítások hatását, ha a fejlesztőkörnyezeted hibakereső (debugger) funkcióját használod. Lépésenként végig lehet menni a sorokon, és megnézni, hogy mi a változók aktuális értéke. Nagyon sokat lehet így tanulni. Nézz utána a neten, hogyan kell használni (Eclipse, NetBeans, IntelliJ stb. környezetben, amit te használsz).
2017. szept. 24. 13:47
Hasznos számodra ez a válasz?
 8/8 anonim ***** válasza:

Sőt, ehhez igazából debugger sem kell. Elég minden iterációban kiírnod a változók értékét. Például:


public static long factorial(int n)

{

long multi = 1;

for (int i = 1; i <= n; i++) {

System.out.print("multi = " + multi + ", i = " + i);

multi = multi * i;

System.out.println(", multi uj = ", multi);

}

return multi;

}

2017. szept. 24. 13:56
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!