以下递归函数的时间复杂度是多少?

时间:2018-06-11 00:34:04

标签: algorithm time-complexity

下面的程序是查找数组的所有子集。程序的时间复杂度是否为O(2 ^ n)?

有没有简单的方法可以找到递归函数的时间复杂度?

感谢您的期待

public static void getAllSubSet(int[] arr,int[] subset,int index){

        if(index == arr.length)
            printarr(subset);
        else{
            subset[index] = -1;
            getAllSubSet(arr, subset, index+1);
            subset[index] = arr[index];
            getAllSubSet(arr, subset, index+1);
        }

    }

    public static void printarr(int[] set){
        for(int i=0;i<set.length;i++){
            if(set[i] != -1){
                System.out.print(set[i] +" ");
            }
        }
        System.out.println("");

    }


    public static void main(String[] args) {
        // TODO Auto-generated method stub

        int[] arr = {1,2,3};
        int[] subset = new int[arr.length];

        getAllSubSet(arr, subset, 0);


    }

1 个答案:

答案 0 :(得分:0)

回答您的第一个问题:

您的功能的复杂性为O(n* 2^n)。但是,如果n非常大,则可以忽略n。

回答您的第二个问题:

我发现用于近似递归算法复杂度的最佳方法之一是绘制递归树。一旦有了递归树,就可以找到复杂性。