for循环的递归算法复杂度

时间:2015-05-06 12:24:34

标签: algorithm recursion complexity-theory

我有一个递归算法,如:

void bishopSolver(int level, int i, int board[][N]){
    int size = 63 - (6 -  level);
    for (; i < size; i+=2){
        addToMap(level, i);
        if(level == 3 && isFull(board)){
            printout();
            return;
        }
        if (level < 3){
            bishopSolver(level + 1, i + 2, board);
        }
        removeFromMap(level);
    }
}

正如我所看到的,如果它有递归和一个for循环,复杂性将是n,但我不确定。谁能告诉我平均情况和最坏情况的情景复杂性?

1 个答案:

答案 0 :(得分:0)

复杂性为scene,假设您从Background开始。

O(n^4)时,您有level==0次递归调用。
他们每个人都在size进行level==0递归调用,到目前为止共计size
每个人都在level==1处进行size^2次递归通话,总计为size

在第3级,每次调用都会循环level==2次,为您提供size^3

假设sizesize^4(或具体而言,假定为size,则会导致O(n)复杂性,当然还有size==n-(6-level),{{1}的进一步假设}和O(n^4)是O(1)(否则也需要考虑它们)。