Я изучаю временную сложность и имею эту функцию:
public static double pow( double x, int n ) {
if( n==0 ) return 1.0;
return x*pow(x,n-1);
}
Мне нужно найти рекуррентное соотношение для его временной сложности, и я знаю, что ответ T(n) = T(n-1) + O(1), чего я не понимаю, потому что Я думаю, что должно быть T(n) = T(n-1) + O(n). Мое рассуждение состоит в том, что я умножаю каждый рекурсивный вызов на x, который происходит n раз, так что это O (n), верно?
* редактировать: я думаю, что понимаю свою ошибку. T(n) = T(n-1) + O(1) предназначен только для этого конкретного вызова, так что это явно O(1), и решение повторения приводит к n*T(n-1) + (n-1)O (1) поэтому (n-1)O(1) игнорируется, поскольку оно меньше n*T(n-1). Таким образом, мы получаем порядок роста = O (n).