2016-09-01 4 views
-3

Ich habe versucht, herauszufinden, wie diese Frage zu lösen, aber ich verstehe nicht. Wenn ich nehme , b ist nicht ==0 und b%2=1 so dann habe ich mystery(2+2, 25/2) + 2. Ich verstehe nicht, was ich mit der +2 am Ende und ich verstehe nicht, ob ich a und b hinzufügen oder den Code erneut mit den neuen Werten tun soll.Brauchen Sie Hilfe Java rekursiv zu lösen

Was sind die Werte für mystery(2, 25) bzw. ?

public static int mystery(int a, int b) { 
    if (b == 0) return 0; 
    if (b % 2 == 0) return mystery(a+a, b/2); 
    return mystery(a+a, b/2) + a; 
} 

Antwort zur Auswahl:

33554432, 177147 
525, 1331 
50, 33 
75, 44 
+5

einen Bleistift und Papier holen und die Schritte auszuschreiben. Sie können Rekursion verstehen, wenn Sie fertig sind. – duffymo

+3

Debuggen Sie es in Ihrer IDE. Sie können also durch Ihren Code gehen und beobachten, wie sich die Variablen ändern. – vanje

+0

Haben Sie diese Frage vergessen? – Vitorlui

Antwort

0

jeden Aufruf Geheimnis auswerten, bis b 0 und die rekursive Aufrufkette beendet ist. Sie fügen dann das letzte 0-Ergebnis mit dem Zwischenprodukt a (das + a) im Code hinzu.

+3

Es ist keine Antwort. – xenteros

3

Ich erstelle ein Bild versuchen, die Antwort zu illustrieren ...

-Über +2 Sie nach der Rückkehr des nächsten Rückruf hinzuzufügen haben ...

Hinweis: Wenn Sie übergeben ein float value to int Parameter als 12.5 der Parameter wird nur den ganzzahligen Teil erhalten: 12

Wenn es in Ordnung ist, überprüfen Sie bitte wie zutreffend! ;)

enter image description here

+2

upvote wegen des Bildes – Miki

+0

Danke für das Bild. Ich verstehe alle Schritte und warum der Code fortfährt, bis b = 0. Aber ich verstehe nicht, warum die Antwort 50 und 33 ist. Ist es, weil 2 * 25 50 und 3 * 11 = 33 ist? – karrokakka

+0

Ich schrieb alles auf ein Papier und ich verstehe es endlich! Danke für die Hilfe und das Bild. Es hilft sehr! – karrokakka