【问题标题】:how to compute Big O complexity in this recursive algorithms?如何在这种递归算法中计算大 O 复杂度?
【发布时间】:2015-03-23 23:39:29
【问题描述】:

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

输入:4

输出: 1111 112 121 112 22 13 31 4 有 8 (2^(n-1)) 种不同的方法可以得到 4。

我想知道这个算法的大 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;
    }
}

【问题讨论】:

    标签: recursion big-o complexity-theory


    【解决方案1】:

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

    如果您查看您提供的代码,您会开始想象代码不是递归的。在这种情况下,算法的数量级为 n(主 for 循环)。递归函数被调用 n 次,每次调用 (n-1)! (n-1 阶乘) 次 (n-1 .. 0)。所以在我看来你所拥有的是

    O(n(n-1)!) => O(n!)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 2021-05-28
      相关资源
      最近更新 更多