Это старая домашняя проблема из моего класса алгоритмов. У меня есть решение проблемы, но даже после неоднократных попыток я не понимаю, как думать в правильном направлении, чтобы прийти к решению.Анализ рекурсии в алгоритмах
function h(N) {
if (N==1) return 3;
else {
sum = 1;
i = 0;
while (i < h(N-1))
sum = sum + i;
i = i + 1;
return sum;
}
}
По мне, так как ч (N-1) называется многократно в цикле в то время, в то время как контур должен работать столько, сколько раз, как то, что возвращается ч (N-1). Кроме того, вызов функции h (N-1) в цикле while также произойдет много раз. Таким образом, в соответствии со мной, я должен получить что-то вроде этого:
Т (N) = Т (N-1) * H (N-1) + C * H (N-1) + D
где
1. T (N) - это время работы,
2. T (N-1) * H (N-1), поскольку один рекурсивный вызов h (N-1) будет принимать T (N-1), и поскольку он пересчитывается каждый раз при сравнении, он будет называться Н (N-1) раз. (где H (N-1) - это значение, возвращаемое вызовом)
3. и C * H (N-1) - это время выполнения операторов внутри цикла while (так как цикл while запускает H (N- 1) раз.
я не получил удовлетворительного ответа от моего профессора, и я был бы признателен, если кто-то может помочь мне понять это.
Спасибо!
Спасибо! Это было действительно полезно. Я понял, как я думал об этом, что дало мне T (N) = T (N-1) * H (N-1) + C * H (N-1) + D на самом деле то же уравнение, что вы упомянули T (N) = T (N-1) * H (N-1) + O (1), так как C * H (N-1) + D является константой. Спасибо за четкое объяснение! – Shobit