重复函数的大O表示法

时间:2016-11-30 00:48:34

标签: time big-o complexity-theory notation

我一直在练习大O符号,除了涉及递归函数之外,我似乎理解它。我可以处理简单的问题(比如O(n)O(1),但我通常会迷失其他任何东西。 以下是三个实践问题,如果有人解释他们如何找到答案的过程,我将非常感激。

  public static int method2(int n)
  {
    if (n < 1) throw new IllegalArgumentException();
    if (n == 1)
      return 2;
    else
      return method2(n - 1) * (2 * n);
  }


  public static void method3(int n)
  {
    if (n < 1) throw new IllegalArgumentException();
    if (n == 1)
      System.out.print("1");
    else {
      method3(n - 1);
      System.out.print(", " + n);
    }
  }


  public static void method4(int n)
  {
    if (n < 1) throw new IllegalArgumentException();
    if (n==1) System.out.print(1);
    else if (n==2) System.out.print("1 1");
    else {
        System.out.print((n+1)/2+ " ");
        method4(n-2);
        System.out.print(" "+(n+1)/2);
    }
}
}

1 个答案:

答案 0 :(得分:0)

这个例子很简单。

method2中,您从n开始,然后按1向下走,直至1。因此,您将n拨打method2,即O(n)

method3method2相同,只是操作不同。您可以将method3调整为n,然后将1减少method4

n中,2减少1,直至其2n/2,因此您将执行<a name="Suchfeld">Suchfeld</a><a class="Schlagwort" name="Suchfeld_Definition"></a> 步骤,即还是O(n)。

这不是了解递归函数速度的最佳示例。您需要使用具有多个递归选项的示例。

所有这些选项都可以转换为具有相同复杂性的for循环,所以尽量以这种方式思考它是否可以帮助你。