Faktoriális, miért így működik Java-ban?
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!
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.
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.
#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.
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
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?
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;
}
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!