Algorithm 定义具有两个变量的重复

Algorithm 定义具有两个变量的重复,algorithm,Algorithm,我被要求定义和求解一个递归T(n),并用大O表示法表示它,但我对这两个变量感到困惑。我想我正在处理f(m,n)=1+f(m+1,n-3)的n>1,而f(1)=m+10将是我的基本步骤?但除此之外,我不确定 int f(int m, int n) { if (n<=1) return m+10; else return 1+f(m+1,n-3); } intf(intm,intn) { 如果(n问题可以在O(1)时间内解决。解决方案仅取决于n

我被要求定义和求解一个递归T(n),并用大O表示法表示它,但我对这两个变量感到困惑。我想我正在处理
f(m,n)=1+f(m+1,n-3)
n>1
,而
f(1)=m+10
将是我的基本步骤?但除此之外,我不确定

int f(int m, int n)
{
    if (n<=1)
        return m+10;
    else
        return 1+f(m+1,n-3);
}
intf(intm,intn)
{

如果(n问题可以在O(1)时间内解决。解决方案仅取决于n的值

f(m,n) = 1+f(m+1,n-3) for n > 1

现在可以这样写:

f(m,n)=⌊n/3⌋+m+⌊n/3⌋+10 等于

f(m,n)=2⌊n/3⌋+m+10

下面给出了该函数的C代码

int f(int m, int n)
{
    return (2*(n/3)+m+10);
}

你说:
f(n,m)
然后做
intf(intm,intn)
你确定你的表达式是正确的吗?好的,现在通过
f(1)
你的意思是
n=1
,因为在这种情况下,你是基于
n
的值返回它的。你介意描述一下在那种情况下
m
的可能值吗?请注意,这个东西的运行时间并不依赖于m。具体来说,你有T(m,n)=1+T(m+1,n-3),T(a,1)=T(a,0)=T(a,-1)=1.a可以是任何东西。R(n)=1+R(n-3)(R(n)=T(m,n))和R(1)=R(0)=R(-1)=1。T(m,n)的运行时间是ceil((n+1)/3)。这里有一个小测验供您使用:在O(1)中找到一种方法。步骤1是放置一个
printf(“m=%2d n=%2d\n”,m,n)
在函数的开头,然后用各种小数字调用函数,直到您了解函数的功能。然后一切都变得简单,包括thang的O(1)挑战。
int f(int m, int n)
{
    return (2*(n/3)+m+10);
}