2012-03-14 4 views
-2

Я новичок в рекурсивных методах, и я просто не совсем понимаю этот код на 100%, или, может быть, знаю, но могу ли я поразмышлять над этим кодом?Что делает этот рекурсивный метод тайны?

public static void mystery(int n) { 
    if(n==0){ 
     return; 
    } 

    if(n%3 == 0){ 
     System.out.println(n); 
    } 

    mystery(n-1); 

} 

До сих пор я знаю, что он проверяет, является ли n равным 0, и если оно есть, то оно возвращается. Затем он проверяет, является ли int n делимым на 3, а затем он выводит int n. Затем он вызывает тайну (n-1)? Я не очень хорошо понимаю последнюю строку кода.

+1

Он просто вызывает тот же метод с параметром '(n-1)'. Таким образом, в основном он будет продолжать проверять все числа, делящиеся на 3 от n до 0, и печатать только те, которые делятся. Просто попробуйте записать его и сушить его – noMAD

+4

** Сначала ** убедитесь, что у вас есть соответствующие кронштейны. – Nishant

+1

Лучшим способом понять такие вещи было бы фактически запустить этот код с различными параметрами, узнать, как использовать отладчик, и найти его сами. Тогда вы не только поймете эту часть кода, но и научитесь чему-то полезному. – Axel

ответ

5

Он будет печатать все числа от п к нулю, делящиеся на 3.

Это будет иметь тот же эффект, как

void mystery(int i) 
{ 
    while(i>0) 
    { 
     if(i%3 == 0) 
     { 
      print(i); 
     } 
     i--; 
    } 
} 

часто вы можете использовать этот подход (итерационный) или рекурсивный метод для достижения того же результата.

2

Что делает этот метод печати все числа меньше или равно к введенному которые делятся на 3

6

Этот метод не делает ничего, это даже не скомпилируется.

Предполагая, что он сделал, однако он просто печатает все числа, делящиеся на 3 меньше, чем исходная п (тайна вызова п - 1 работают функцию снова для следующих меньших межд).

с кодом

public static void mystery(int n) { 
    if (n == 0) { 
     return; 
    } 
    if (n % 3 == 0) { 
     System.out.println(n); 
    } 
    mystery(n-1);  
} 

, вызванный 5, будет проверять 5, который не является ни 0, ни делится на три. поэтому он будет вызывать метод на 5 - 1 или 4. Он будет продолжать делать это до тех пор, пока он не достигнет 0. Распечатайте все числа, которые делятся на 3 по пути.

5

Он печатает все числа, которые можно разделить на 3, начиная с номера, до 3.

Если вход 16 это выход будет 15 12 9 6 3.

И что тайна об этом?

1

, что это делает, чтобы проверить, если число начиная с n до 1 делится на 3

Вот разбивка:

  • вызов функции с определенным int в качестве параметра
  • Распечатайте номер, если он делится на 3
  • вызывает ту же функцию, где n = n - 1 значение n «на один меньше», чем прошедший номер
  • функция завершается, когда передаваемое число равно 0
0

он напечатает н.у.к. от n до 0, делящиеся на 3. предположит, п = 12 ответа будет

12 
9 
6 
3 
3

Ваших код дает ошибку компиляции ... должно быть, я думаю ...

Он будет печатать все числа, делящиеся на 3 между 0 и n.

Смежные вопросы