递归的最坏情况时间复杂度

时间:2017-03-06 11:47:15

标签: c++ recursion time-complexity

int memo[101][101];  
int findMinPath(vector<vector<int> >& V, int r, int c) {  
  int R = V.size();  
  int C = V[0].size();  
  if (r >= R || c >= C) return 100000000; // Infinity  
  if (r == R - 1 && c == C - 1) return 0;  
  if (memo[r][c] != -1) return memo[r][c];  
  memo[r][c] =  V[r][c] + min(findMinPath(V, r + 1, c), findMinPath(V, r, c + 1));  
  return memo[r][c];  
}  

Callsite :   
memset(memo, -1, sizeof(memo));  
findMinPath(V, 0, 0);

在上面的代码中,最坏的时间复杂度是什么?。我知道每个函数最多会调用其他函数一次,但我不清楚计算时间复杂度。

1 个答案:

答案 0 :(得分:2)

备忘录是关键所在。通常情况下,这会呈指数级增长,但因为如果先前在memo中计算结果,您永远不会执行其他递归步骤,那么在最坏的情况下,它会减少到memo中的元素数。即 O(101 x 101)