» »

(Java)faktoriela

(Java)faktoriela

pajac ::

public class Risto
{
/**
* Metoda za izracun FAKTORIELE
* podanega naravnega stevila
*/
static int faktoriela(int n)
{
int rezult=0; // nam shrani rezultat
int[] temp=new int[n]; // izracunavanje rezultata
int[] tabelca=new int[n]; // naredimo iz naravnega stevila tabelo

// nafilamo tabelo
for(int i=0; i< n; i++)
{
tabelca[i] += 1;
}

// dejansko racunanje fakt.
for(int i=0; i< n; i++)
for(int j=0; j< tabelca.length; j++)
{
temp[j] *= tabelca[i]; // mnozimo oz racunamo.
rezult = temp[j];
}
return rezult;
}
}

Problem je ta da pri klicanju metode za izracun faktoriele dobim rezultat 0!!
HA!..Tega pa nima še nihče!! ;p
  • spremenilo: pajac ()

DMouse ::

tabelca[i] += 1;
Tale ukaz mi je malo čuden, ti teoretično ne veš kakšna je začetna vrednost integerja, potem pa to vrednost povečaš za 1?

Tista dvojna zanka je pa še bolj krneki. Sori, ampak nevem kaj nej drugega rečem. Prvič, nevem zakaj si šel delat še eno začasno tabelo. Drugič: tudi ta začasna tabela ima nedefinirane vrednosti (v praksi je vrednost 0), potem pa to pomnožiš z enim elementom druge tabele... 0 * (0 + 1) = 0.
Tretjič: denimo da bi v tabelah bile kake logične vrednosti, bi stavek "temp[j] *= tabelca[i];" v temp vedno prepisoval prejšnje vrednosti. Edini efekt zunanje zanke je daljše izvajanje, v praksi bi namesto nje lahko naredil i = n - 1;

kopernik ::

  public static int faktoriela(int n) {
    int x = 1;

    for (int i = 2; i <= n; i++) {
      x = x * i;
    }

    return x;
  }

Zgodovina sprememb…

  • spremenil: kopernik ()

kopernik ::

Problem imaš, ker se pri inicializaciji int arraya vedno postavijo vrednosti na 0. Množenje z nič je pa vedno nič.

pajac ::

Ja pa zakaj bi blo enostavno. če lahko kompliciramo?;((

Uglavnem hvala vama na pomoci (pocasi bo ze steklo to programiranje...)!:)
HA!..Tega pa nima še nihče!! ;p

SeTAr ::

Pa še en bolj "didaktičen" primer:
  public static int faktoriela(int n){
  	if (n==1 || n==0) return 1;
  	else return ( n * faktoriela(n-1) );
  }

Zgodovina sprememb…

  • spremenil: SeTAr ()

nokaut240 ::

A je možno napisati faktorielo brez rekurzije, ampak z iterativno rešitvijo?

Matek ::

tabelca[i] += 1;
Tale ukaz mi je malo čuden, ti teoretično ne veš kakšna je začetna vrednost integerja, potem pa to vrednost povečaš za 1?
To ni C, v Javi se prazen array intov ob inicializaciji napolni z ničlami, kot je rekel kopernik.
Bolje ispasti glup nego iz aviona.

kihc ::

A je možno napisati faktorielo brez rekurzije, ampak z iterativno rešitvijo?


klik
x


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C#] Domača naloga za faks

Oddelek: Programiranje
172093 (1717) Spura
»

Java

Oddelek: Pomoč in nasveti
141362 (987) shadeX
»

[C++] Kako vrniti NULL če je polje prazno

Oddelek: Programiranje
271766 (1283) Matic1911
»

C# (strani: 1 2 )

Oddelek: Programiranje
9712045 (8880) Ericssony
»

osnove v Javi - zvezdice

Oddelek: Programiranje
403542 (2764) Tutankhamun

Več podobnih tem