#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.