Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何找到这个递归函数的递归关系?_Java_Recursion_Time Complexity_Analytics - Fatal编程技术网

Java 如何找到这个递归函数的递归关系?

Java 如何找到这个递归函数的递归关系?,java,recursion,time-complexity,analytics,Java,Recursion,Time Complexity,Analytics,这里我得到了一个这样的函数,我想找到它的递归关系,然后计算该递归关系的时间复杂度 public static void f(int n) { if (n == 1) { //" Do sth " } else { for (int i = 1; i < n; i++) { f(i - 1); //" Do sth " } } }

这里我得到了一个这样的函数,我想找到它的递归关系,然后计算该递归关系的时间复杂度

 public static void f(int n) {
    if (n == 1) {
        //" Do sth "
    } else {
        for (int i = 1; i < n; i++) {
            f(i - 1);
            //" Do sth "
        }
    }
}
publicstaticvoidf(int n){
如果(n==1){
//“做某事”
}否则{
对于(int i=1;i
实际上,我为此做了很多尝试,得到了T(n)=n*f(n-1),但我不确定。你能帮我找到正确的关系并解决它吗?

假设T(1)=“做某事”是恒定的功,即它不依赖于输入大小
n
,你可以将递归时间函数写成:

T(n) =  T(1) + T(2) + ... + T(n-1)
     =  { T(1) } +  { T(1) } + { T(1) + T(2) } + { T(1) + T(2) + T(3) } + { T(1) + T(2) + T(3) + T(4) } +....

     [let T(1) = x]

     =  x + x + {x + x} + {x + x + (x + x)} + {x + x + (x + x) + x + x + (x + x)} +....

     = x + x + 2x + 4x + 8x + ...

     ~ x.2^(n-2)

     ~ O(2^n)
下面是一个python程序,用于演示求和的系数序列:

t = [0 for i in range(10)]
for i in range(1,10):
  if i == 1:
    t[i] = 1
  else:
    val = 0
    for j in range(1,i):
      val += t[j]
    t[i] = val
print(t[1:])
印刷品:[1,1,2,4,8,16,32,64,128]


您可以看到,对于n>=2,2(n-2)在每个“n”中都适用,复杂性为O(2n)

请注意,时间复杂性将是
n
的表达式,而不是涉及
f()
:因此,开始编写少量n的运行:如果n=1,n=2,…,到n=10,f()会运行多少次?实际上,编写调用链以了解此代码的行为是只有您才能做的事情,之后您甚至不可能还需要我们=)并且不要忘记添加
“do sth”
的贡献。再次检查,实际运行时是O(phi^n),其中phi是黄金比率1.618@templatetypedef我发现复杂性为2^n。请检查答案,否则请更正。