Recursion 将递归转换为动态&;计算其时间复杂度

Recursion 将递归转换为动态&;计算其时间复杂度,recursion,time-complexity,dynamic-programming,recurrence,Recursion,Time Complexity,Dynamic Programming,Recurrence,我正在解一个代码,我的递归函数是这样的-> int rec(n) { if(n>=(n/2+n/3+n/4)) { return n; } else { return rec(n/2) + rec(n/3) + rec(n/4); } } 我想知道这个函数的时间复杂度是多少 我想这个循环关系应该是- T(n) = T(n/2) + T(n/3) + T(n/4) + f(n) 如何解决这种递推关系?在这种情况下,f(n)的值

我正在解一个代码,我的递归函数是这样的->

int rec(n)
{

  if(n>=(n/2+n/3+n/4))
  {
      return n;
  }


  else
  {

     return  rec(n/2) + rec(n/3) + rec(n/4); 

  }

}
我想知道这个函数的时间复杂度是多少

我想这个循环关系应该是-

T(n) = T(n/2) + T(n/3) + T(n/4) + f(n)
如何解决这种递推关系?在这种情况下,f(n)的值是多少

还有,如何将其转换为动态规划

我编写的将其转换为动态的代码是-

    long long  rec(long long n)
{
    long long c[n]; // The number range is between 1 to 10^9


    for(int i=0;i<n;i++)
    c[n]=0;


    if(n>=(n/2+n/3+n/4))
    {
        c[n]=n;
        return n;
    }
    else
    {
        if (c[n]==0)
        c[n]=c[n/2]+c[n/3]+c[n/4];
        return c[n];
    }

}
long-long-rec(长n)
{
long long c[n];//数字范围在1到10^9之间
对于(int i=0;i=(n/2+n/3+n/4))
{
c[n]=n;
返回n;
}
其他的
{
如果(c[n]==0)
c[n]=c[n/2]+c[n/3]+c[n/4];
返回c[n];
}
}
然而,在将递归转换为动态之后,我的程序拒绝显示正确的答案。我想我还没有把它正确地转换成动态规划。你能告诉我怎么做吗


感谢

if(n>=(n/2+n/3+n/4))基本上等同于if(n经验法则:
O(n^(a/b))
,即polinomial。这两个函数都不一致地使用缩进,而且由于缩进不一致,很容易误读。我拒绝阅读这样一个碍眼的东西。请骄傲一点,修复您的缩进。希望其他人会跟随我。您的第二段代码没有编译,并且由于缺失而存在明显错误请给我们您运行的实际代码,以便我们能够提供有意义的反馈。好的,对发布的问题进行必要的更改。
T(0) = 1
T(n) = T(n/2) + T(n/3) + T(n/4)
T(n) <= cnlog2n
T(n) <= cn/2*logn/2 + cn/3*logn/3 + cn/4*logn/4
      = cn/2*logn - cn/2*log2 + cn/3*logn - cn/3*log3 + cn/4*logn - cn/4*log4
      = cn/2*logn - cn/2 + cn/3*logn - cn/3*log3 + cn/4*logn - cn/2
      = 13/12*cn*logn - cn(log3/3 - 1) 
if T(n) = O(n^2) then T(n) <= cn^2
T(n) <= c(n/2)^2 + c(n/3)^2 + c(n/4)^2
      = cn^2/4 + cn^2/9 + cn^2/16
      = 15cn^2/36 <= cn^2