Как найти значение переменной из рекурсивного метода? - PullRequest
0 голосов
/ 13 января 2019

Мне нужна помощь в поиске значения из переменной v. Этот метод взят из упражнения, которое я пытался сделать. Он запросил возвращаемое значение от этого ввода:

Я сделал System.out.print на моем main(), чтобы показать возвращаемое значение:

public static void main (String[]args) {
    System.out.println(m(2,"43912"));
}

Вывод этого: CDEF21912

Я понимаю часть CDEF и часть 219, но я просто не понимаю, почему v возвращается как 12.

static int m(int i, String s) {   
  int v = 0;   
  System.out.print((char)(i+'A'));   
  if (i < s.length()) {   
    char c = s.charAt(i);    
    v = m(i + 1, s) + c - '0';     
    System.out.print(c);     
  }     
  return v;     
}

1 Ответ

0 голосов
/ 13 января 2019
Step1:
  print:C  
Step2:
  print:D
Step3:
  print:E  
Step4:
  print:F  at the same time, finishing function m  and return v=0
Step5:
  i=4,c=2,v=0+'2'-'0',print 2 and return v=2
Step6:
  i=3,c=1,v=2+'1'-'0',print 1 and return v=3
Step7:
  i=2,c=9,v=3+'9'-'0',print 9 and return v=12

До сих пор печать выполняется в формате «CDEF219», затем выполняется System.out.println (12), вы знаете последний возврат функции m (из шага 7), поэтому 12 будет добавлено в «CDEF219», и результат становится "CDEF21912". В следующий раз вы можете использовать точку разрыва, чтобы помочь вам понять. Надеюсь, мой ответ может помочь вам.

...