» »

Java, eno vprašanje

Java, eno vprašanje

VeNoM666 ::

Zdravo!
Zanima me, če bi mi lahko prosim nekdo razložil, zakaj spodnja metoda vrne 96? Sem poskusil z debugerjem pa mi še vedno ni jasno.
Hvala!
public class Test
{
  
  public static int funkcija(int m, int n)
{
  if(m>0)
  {
    return m*funkcija(m-1, n);
  }
  
  if(n>0)
  {
    return n+funkcija(m, n-1);
  }
     
     return 1;
}
  
  public static void main(String[] args)
  {
    int rezultat;
    rezultat=funkcija(4,2);
    System.out.print(rezultat);
  }
}

// 4*(3,2)

Blinder ::

kolko bi moralo vrnit? 28?

a čak. tep ti, iz m-jev, dobi vn 4*3*2*1, torej 24. Potem pa teh 24 gre množit z n-ji in sicer (2+1+1), torej 24*4, kar pride glih 96.
ko kličeš funkcija(0, 0) ti returna 1, in s tole enko pomnoži tistih m-jevih 24.
99.991% of over-25 population has tried kissing.
If you're one of the 0.009% who hasn't, copy & paste this in your Signature.
Intel i3-12100f gtx 3050 Pismo smo stari v bozjo mater. Recesija generacija

Zgodovina sprememb…

  • spremenil: Blinder ()

VeNoM666 ::

To je naloga iz enega izpita in je vprašanje, koliko vrne naslednja funkcija (ok, to je sicer za C, ampak saj je podobno kot v javi)
int funkcija(int m, int n)
{
  if(m>0)
  {
    return m*funkcija(m-1, n);
  }
  
  if(n>0)
  {
    return n+funkcija(m, n-1);
  }
     
     return 1;
}


Sam sem dodal razred in metodo main in mi je izpisala 96

Blinder ::

jaz sem prvo spregledal, da je pri n-ju plus in ne krat.
99.991% of over-25 population has tried kissing.
If you're one of the 0.009% who hasn't, copy & paste this in your Signature.
Intel i3-12100f gtx 3050 Pismo smo stari v bozjo mater. Recesija generacija

VeNoM666 ::

Aha, tnx, vidim, da si me prehitel.
Tole mi je jasno, da je m 24, n pa 4, ni mi pa jasno zakaj potem pomnoži 24*4*1?

Če prav razumem, se returni pomnožijo med sabo, če funkcija/metoda večkrat vrača znotraj rekurzije?

Zgodovina sprememb…

  • spremenil: VeNoM666 ()

Blinder ::

težko za razumet, težko za razložit.

ko se ustvarja rezultat z m-ji dobiš 4*3*2*1. Potem tole, =24, pomnožiš z (2 + f(0,1)). Zdej, f(0,1) je (1 + f(0,0)). f(0,0) je 1(zaradi return 1). in pogledaš za nazaj,
(1 + f(0,0)) = 1+1 = f(0,1) = 2
(2 + f(0,1)) = 4
Potem tole, =24, pomnožiš z (2 + f(0,1)) torej si 24 pomnožil z 4.
a bo šlo?
99.991% of over-25 population has tried kissing.
If you're one of the 0.009% who hasn't, copy & paste this in your Signature.
Intel i3-12100f gtx 3050 Pismo smo stari v bozjo mater. Recesija generacija

VeNoM666 ::

Pomojem, da bo, hvala! :)

Blinder ::

nb, tut js treniram javo te dni, pa mi koristi tudi kakšna taka nalogca
99.991% of over-25 population has tried kissing.
If you're one of the 0.009% who hasn't, copy & paste this in your Signature.
Intel i3-12100f gtx 3050 Pismo smo stari v bozjo mater. Recesija generacija


Vredno ogleda ...

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

Pomoč z C++ nalogo

Oddelek: Programiranje
101427 (1234) denis123
»

Program v C

Oddelek: Programiranje
51932 (1771) darkkk
»

[NALOGA][Java] Sinus

Oddelek: Programiranje
81303 (1235) Lukeatluke
»

[C++] Rekurzija

Oddelek: Programiranje
73360 (3101) A1eN
»

OpenGL orr v ansi c

Oddelek: Programiranje
121637 (1425) igor12

Več podobnih tem