Найти результат рекурсивного метода

#java

Вопрос:

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

 public int m5(int n){       //use n = 6 for initial n
         if(n>=3){
                n  = m5(n-3);
                n  = m5(n/2);
         }
         return n;
}
 

Ответ №1:

Ваш алгоритм не сходится. Вы можете вычислить вручную первые 6 значений, из m5(x) которых:

 x  m5
0   0
1   1
2   2
3   4
4   7
5  11
6  21
 

Но теперь взгляните на вычисления m5(7) , которые вам придется вычислить md5(7-3) = md5(4) = 7 . Затем после того, как сумма n будет 7 7 = 14 . Поэтому в следующем вызове вам нужно вычислить md5(14/2) = md5(7) , но m5(7) это именно то, что мы пытаемся вычислить, чтобы у вас была рекурсия бесконечности.

Комментарии:

1. Спасибо за ответ, но как вы получили значения m5.