Big-O рекурсивной функции, вызываемой дважды на основе двух переменных - PullRequest
0 голосов
/ 18 апреля 2019

Какова будет временная сложность этой функции:

 public int calculate(int n, int i, int c) {
  if(i >= n || c <= 0)
    return 1;

  int p1 = 2 * calculate(n, i, c-1);
  int p2 = 1 + calculate(n, i+1, c);

  return  p1 + p2;
}

Функция вызывается дважды, один для всех значений 'c' и один для всех значений 'i'. Можем ли мы сказать, что его временная сложность равна O (2 ^ (n + c)). Если да, можно ли найти более жесткий предел?

1 Ответ

0 голосов
/ 18 апреля 2019

O (2 ^ (n + c)) достаточно.Я не уверен, как мы можем получить что-то более гранулированное, чем это асимптотически.Если N имеет значительно большую абсолютную разницу от i, чем C имеет от 0, мы можем просто сказать O (2 ^ n) или O (2 ^ c)

...