【发布时间】:2010-05-22 17:24:48
【问题描述】:
我不确定这是否是发布此内容的正确位置,但问题实际上属于编程作业。这个递归是我可能应该知道如何解决的,但我遇到了一些麻烦。
解决递归:
T(0) = 2;
T(n) = T(n-1) + 2;
解决办法:
T(n) = 2(n+1)
有人可以告诉我他们是如何解决这个问题的吗?
请注意它不是解决这个特定问题的任务的主要部分。
【问题讨论】:
我不确定这是否是发布此内容的正确位置,但问题实际上属于编程作业。这个递归是我可能应该知道如何解决的,但我遇到了一些麻烦。
解决递归:
T(0) = 2;
T(n) = T(n-1) + 2;
解决办法:
T(n) = 2(n+1)
有人可以告诉我他们是如何解决这个问题的吗?
请注意它不是解决这个特定问题的任务的主要部分。
【问题讨论】:
你必须弄清楚什么是解决方案,然后你可以使用归纳法来证明它。
计算方法很简单。
值是前一个值 + 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
【讨论】:
尝试写出前几个值 - 这应该很明显。
【讨论】:
拿T(5):
T(5)
|
+-> T(4) + 2
|
+-> T(3) + 2
|
+-> T(2) + 2
|
+-> T(1) + 2
|
+-> T(0) + 2
|
+-> 2
现在计算 2 的数量,这些 T(5) 相加。
然后试着算出要为T(n)添加多少2。
【讨论】:
这是一个arithmetic progression 与 ratio 的共同点 2。
第一项是T[0] = 2,ratio 的共同区别是r = 2,所以n + 1th 项(n + 1th 因为0, 1, 2, ..., n 中有n + 1 数字)是T[0] + r*(n + 1 - 1) = 2 + 2*n = 2*(n + 1)。
无需猜测,只需将其识别为等差数列即可。
【讨论】:
T(6)开始的,很多人似乎会一无所知。
n 每减一,2 就加一。这给出了一个变量项2n。由于 T(0) 固定为2,因此这给出了一个常数项2。将它们加在一起得到2n + 2 或2(n + 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).
【讨论】:
正如其他答案所指出的那样,手动解决这个问题非常简单,但如果它有用的话,Mathematica 可以很好地解决 recurrence relations 这样的问题。
评估
RSolve[{T[0] == 2, T[n] == T[n-1] + 2}, T[n], n]
返回
{{T[n] -> 2 (1 + n)}}
例如,它也可以找到第 n 个斐波那契数的封闭形式:
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]}}
【讨论】: