解决递归关系

时间:2010-05-22 17:24:48

标签: algorithm math

我不确定这是否是发布此内容的正确位置,但问题实际上属于编程任务。这个递归是我可能应该知道如何解决但我有点麻烦。

解决递归问题:

T(0) = 2;
T(n) = T(n-1) + 2;

解决方案:

T(n) = 2(n+1)

有人可以告诉我他们是如何达到这个解决方案的吗?

请注意,这不是解决此特定问题的任务的主要部分。

7 个答案:

答案 0 :(得分:7)

你必须弄清楚什么是解决方案然后你可以使用归纳来证明它。

要想解决方案很简单。

值是先前值+ 2.

2, 2+2, 2+2+2, 2+2+2+2, 2+2+2+2+2, ...

使用归纳证明:

T(0) = 2
T(n) = T(n-1) + 2;

Solution
T(n) = 2(n+1)

Proof:
T(n) = T(n-1) + 2 => 2((n-1)+1) + 2 = 2(n+1)

Check for n=0
2(0+1)=2

End of proof

答案 1 :(得分:4)

尝试写出前几个值 - 这应该是显而易见的。

答案 2 :(得分:4)

选择T(5)

T(5)
  |
  +-> T(4) + 2
        |
        +-> T(3) + 2
              |
              +-> T(2) + 2 
                    |
                    +-> T(1) + 2
                          |
                          +-> T(0) + 2
                                |
                                +-> 2

现在计算2一起添加的T(5)个数。

然后尝试确定为2添加多少T(n)

答案 3 :(得分:4)

这是arithmetic progression 比率常见差异2。

第一个词是T[0] = 2比率的常见差异是r = 2所以n + 1个词n + 1因为有n + 1 {1}}中的{1}}数字为0, 1, 2, ..., n

不需要猜测,只需将其识别为算术级别。

答案 4 :(得分:3)

每次n减1时,都会添加2。这给出了2n的变量项。由于T(0)固定为2,因此给出2的常数项。将它们添加到一起会产生2n + 22(n + 1)

答案 5 :(得分:1)

我会按如下方式解决:

Assume that T(n) = a*n + b for some a and b.
T(0) = 2. So a * 0 + b = 2, thus b = 2.

T(n) = T(n-1) + 2, so 
a * n + b = (a * (n-1) + b) + 2 consequently
a * n + b = a * n - a + b + 2 and
0 = - a + 2, thus a = 2.

So we have T(n) = 2 * n + 2 = 2 (n+1).

答案 6 :(得分:1)

正如其他答案所指出的那样,手动解决这个问题非常简单,但是如果它有用的话,Mathematica可以很好地解决recurrence relations这样的问题。

评估

RSolve[{T[0] == 2, T[n] == T[n-1] + 2}, T[n], n]

返回

{{T[n] -> 2 (1 + n)}}
例如,它可以找到第n个Fibonacci数的闭合形式:

RSolve[{F[1] == 1, F[2] == 1, F[n] == F[n-1] + F[n-2]}, F[n], n] //FunctionExpand

返回

{{F[n] -> (((1 + Sqrt[5])/2)^n - (2/(1 + Sqrt[5]))^n*Cos[n*Pi])/Sqrt[5]}}