• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

java przepływ programu.

Konferencja JOIN! 2018
0 głosów
77 wizyt
pytanie zadane 5 lipca w Java przez michaljbjj Początkujący (380 p.)
package xx;

public class Klasa {

	public static void main(String[] args) {  // TODO Auto-generated method stub

		System.out.println(prod(1,4));
	}
	
	public static int prod(int m, int n) {
	
		if (m==n) {
			return n;
		}
		else {
			int recurse= prod(m,n-1);
			int result = n*recurse;
			return result;
			
			
		}
	}

}

Witam. proszę o napisanie jak przepływa kod i stworzenie diagramu stosu. 

Nie jestem pewien i chcę sprawdzić, czy dobrze rozumiem działanie kodu. 

Według mnie wygląda to tak:

jeśli m ==n , zwraca n,

jeśli m nie jest równe n to : recurse=prod(1,3); result=4*(prod(1,3));  ------>   result=4*3*(prod(1,2));

--->   result=4*3*2*(prod(1,2)); ------> return= 4*3*2*1;

program zwraca wynik 24. 

Proszę o pomoc. Dzięki 

 

3 odpowiedzi

+3 głosów
odpowiedź 5 lipca przez Wiciorny Maniak (62,800 p.)

int recurse= prod(m,n-1);

            int result = n*recurse;

            return result;

Jeśli m nie jest równe n : 

- >  następnie  wykonaj  :   odejmij od n  jeden  ( n-1)   i wywołuj rekurencyjnie produkcje "prod'  dla n mniejszego o 1 do otrzymania recurse rezult

-> otrzymany wynik ponóż o bazową wartość n  dla danej produkcji.

 Analogicznie  twoja   odp jest poprawna, trudno  jednoznacznie stwierdzić  jedyną opcje...

druga sprawa  Co  masz na myśli diagramu stosu? Rozpis kolejnych zmiennych w pamieci ?

komentarz 5 lipca przez michaljbjj Początkujący (380 p.)
Dzięki za odpowiedź.

Czyli, według tego co napisałeś idzie tak :

prod(1,4-1) --- > prod(1,3-1)---> prod(1,2-1)--->prod(1,1) czyli opcja if (m==n) i zwraca 1. czyli recurse = 1 i pozniej result 4*1;  tak ?

tylko, czemu po skompilowaniu daje wynik 24. Hmmm

 

Diagram stosu, chodziło mi o schemat wywoływania metod , zmiennych i ich wartości po kolei.
2
komentarz 5 lipca przez Wiciorny Maniak (62,800 p.)
Na stosie pojawiać się będą kolejne rekurencje rzędu n-1 dlatego że dla każdego wywołania rekurencyjnego zwracasz wynik bo funkcja "Coś zwraca" jednak, nie ma 1 iteracji tutaj bo w momencie produktywnego wykonywania rekurencji n-1 i przypisania wartości do zmiennej result, już uruchamiamy kaskade n-2 ... itd do sytuacji w której N==m jest prawdziwe dla rekurencji. Pomysl, wynik jaki zwracasz jest  mnożony przez bazowe wejściowe N, rozrysuj to na drzewku :) to zobaczysz zliczając liczby
+1 głos
odpowiedź 6 lipca przez jankustosz1 Stary wyjadacz (13,690 p.)
Dla 1 1 dostaniesz wynik 1

Dla 1 2 dostaniesz wynik 2*1 = 2

Dla 1 3 dostaniesz wynik 3*2 = 6

Dla 1 4 dostaniesz wynik 4*6 = 24

Dla 1 5 dostaniesz wynik 5*24 = 120

Chyba już widzisz jak to działa:

prod(a, b) = b*prod(a, b-1)
0 głosów
odpowiedź 11 lipca przez michaljbjj Początkujący (380 p.)
Witam. dziękuję za odpowiedzi. już wszystko jasne.

int recurse= prod(m,n-1);

 int result = n*recurse;

  return result;

prod(1,4)  result=4*(1,3)

prod (1,3) result =3*(1,2)

prod(1,2) result=2*1

            

// prod(1,2) == 2

//prod(1,3)==6

 // prod(1,4) == 24

Podobne pytania

0 głosów
4 odpowiedzi 187 wizyt
pytanie zadane 18 stycznia 2016 w C i C++ przez Seamel Nowicjusz (120 p.)
0 głosów
1 odpowiedź 88 wizyt
pytanie zadane 29 grudnia 2017 w Java przez marcinconn Użytkownik (800 p.)
0 głosów
2 odpowiedzi 206 wizyt
pytanie zadane 21 października 2017 w Java przez Kubs Bywalec (2,200 p.)
Porady nie od parady
Forum posiada swój własny chat IRC, dzięki któremu będziesz mógł po prostu pogadać z innymi Pasjonatami lub zapytać o jakiś problem. Podstrona z chatem znajduje się w menu pod ikoną człowieka w dymku.IRC

55,375 zapytań

99,731 odpowiedzi

205,203 komentarzy

27,301 pasjonatów

Przeglądających: 275
Pasjonatów: 9 Gości: 266

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...