通过反向迭代方法求解T(n)= T(n-1)+ 2n

时间:2016-06-14 19:01:29

标签: algorithm iteration recurrence

有人可以帮我解决这个问题。 T(1)= 5,T(n)= T(n-1)+ 2n 步骤说明会很好。

2 个答案:

答案 0 :(得分:0)

要计算T的每个下一个值,您必须知道前一个。这就是“迭代”的含义。你必须经历一个循环,在你计算T(n)的每一步,从T(2),T(3),......等开始,直到你到达某个目标元素。变量T应该是一个数组。

答案 1 :(得分:0)

迭代方法

您可以通过简单的迭代(Java)来解决这个问题:

public static int T (int n) {
    if(n <= 0) {
        throw new IllegalArgumentException("n must be larger or equal to one.");
    }
    int result = 5;
    for(int i = 2; i <= n; i++) {
        result = result + 2*i;
    }
    return result;
}

jDoodle

程序的工作原理如下:首先我们执行边界检查:如果 n 小于或等于零,则结果是未定义的。接下来,我们将5分配给result。在我们输入for循环之前,result等于 T(n),接下来对于for循环中的每次迭代,我们计算 T(i)基于 T(i-1)(在该时间点等于result)。由于for循环迭代到(并包括) n ,因此在迭代结束时result等于 T(n)

恒定时间方法

根据迭代情况,我们可以简化此类using WolframAlpha

5+sum of 2*i with i from 2 to n is equal to n square plus n plus 3

因此,我们可以简化程序,使其在恒定时间内运行:

public static int T (int n) {
    if(n <= 0) {
        throw new IllegalArgumentException("n must be larger or equal to one.");
    }
    return n*n+n+3;
}