如何在这种递归算法中计算Big O复杂度?

时间:2015-03-23 23:39:29

标签: recursion big-o complexity-theory

以下递归代码用于计算可以对给定数字求和的不同可能方式。

输入:4

输出: 1111 112 121 112 22 13 31 4 有8种(2 ^(n-1))种不同的方式来获得4。

我想知道这个算法的Big O复杂性是什么?我很欣赏处理递归算法的基本思维过程。另外一个问题,为什么方法的数量是2 ^(n-1)?我无法从算法中找出答案。非常感谢你们!

    public static int recursive(int n, String out){

    int count=0;

    if (n==0) {
        System.out.println(out);
        return 1;
    } else if (n>0) {

        for (int i=1; i<=n; i++){
            count+=recursive(n-i, out+" "+Integer.toString(i));
        }

        return count;
    } else {
        return 0;
    }
}

1 个答案:

答案 0 :(得分:0)

BigO(顺序)复杂性可能是一个有点松散的术语。它用于算法性能的缩略图估计。

如果你查看你给出的代码,你可以开始想象代码不是递归的。在这种情况下,算法大约为n(主循环)。每次调用(n-1)都会调用递归函数n次! (n-1阶乘)次数(n-1 ... 0)。所以它看起来像你拥有的是什么

O(n(n-1)!)=&gt;为O(n!)

这是发生了多少字符串追加操作的缩略图(主要for循环的内容,这是代码正在做的主要事情)。