Zdravím,
má někdo prosím nějakou hypotézu, proč tento algoritmus funguje s IFem, avšak nikoliv s WHILE?
Za případné nasměrování i čas moc děkuji...
Petr
class Faktorialy {
public static int faktorial;
public static int vysledek = 1;
public static void main(String[] args) {
if (args.length == 0) {
System.out.println("Usage> Name Number");
} else {
faktorial = Integer.parseInt(args[0]);
vysledek = faktorial(faktorial);
System.out.println("Faktorial cisla " + faktorial + " je " + vysledek);
}
}
public static int faktorial(int hodnota) {
while (hodnota > 0) {
// if (hodnota > 0) {
vysledek *= hodnota;
faktorial(--hodnota);
}
return vysledek;
}
}
Fórum › Java
Faktorial - IF funguje, WHILE ne
protože jsou do toho zapleteny dva způsoby výpočtu faktoriálu dohromady (navíc celkem nešikovně ;-)).. buď to jde napsat pomocí cyklu, nebo rekurze (který v podstatě cyklus simuluje).
Argument metody hodnota je po každém volání metody faktorial jakoby jiná proměnná, tzn. pokud tam bude ten cyklus while, tak co se stane:
např. pro hodnota == 3
while (3>0) {
vysledek *= 3;
faktorial(--hodnota); // faktorial(2); hodnota == 2; a while pokracuje
}
teď vůbec nezáleží, co to rekurzivní volání udělá, cyklus se znovu zopakuje pro 2, tj. se vysledek vynásobí dvěma, následně jedničkou. No ale jelikož je tam volána metoda rekurzivně tak se ještě provede cyklus while(2) {..} v té volané metodě, ve které se v našem případě opět násobí dvojkou, atd... Doufám, že to půjde trochu pochopit :-)
Jinak trochu ukázek:
Faktoriál pomocí while:
public static int faktorial(int hodnota) {
int temp = 1;
while (hodnota > 0) {
temp *= hodnota;
hodnota--;
}
vysledek = temp;
return temp;
}
Faktoriál pomocí rekurze:
public static int faktorial(int hodnota) {
if (hodnota < 1) {
return 1;
}
return (faktorial(hodnota-1) * hodnota);
}
Zjistit počet nových příspěvků
Přidej příspěvek
Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
Uživatelé prohlížející si toto vlákno
Uživatelé on-line: 0 registrovaných, 12 hostů
Podobná vlákna
Faktorial - IF funguje, WHILE ne — založil Petr Hájek
Faktorial ve while — založil Noneus
Faktoriál (výpis 1*2*3....) — založil Killbertos
Moderátoři diskuze