Рекуррентное отношение следующей функции

Я пытаюсь определить рекуррентное отношение следующей рекурсивной функции.. Я думаю, что я сделал это правильно, но хотел бы получить некоторую информацию о моем методе решения..

Solve for C(n) the number of additions that this function does:
  //precondition: n>0
 int fct (const int A[], int n) {
      if (n==1)
         return A[0]*A[0];
      else return A[n-1] * fct(A,n-1) * A[n-1];
 } 

Здесь происходит ровно два добавления, а также рекурсивный вызов для n-1. C(1)=1 C(n)=2+C(n-1) //2 из-за количества добавлений плюс рекурсивный вызов C (n-1)

Следовательно

C (2) = C (1) + 2 = 1 + 3 = 3 C (3) = C (2) + 2 = 2 + 3 = 5 C (4) = C (3) + 2 = 7 C (n) = 2n-1

где большой o это O(n)?

1 ответ

Правильный. Имейте в виду, что структура рекурсивной функции зависит от n:

int addRec(int A[], int n) {

В остальном сложения имеют постоянное время, поэтому вы выполняете постоянную операцию n раз, что приводит к сложности O(n) времени, которую вы получили.

Другие вопросы по тегам