我有这个递归函数:
f(n) = 2 * f(n-1) + 3 * f(n-2) + 4
f(1) = 2
f(2) = 8
我从经验中知道它的明确形式是:
f(n) = 3 ^ n - 1 // pow(3, n) - 1
我想知道是否有办法证明这一点。我google了一下,但没有找到任何简单的理解。我已经知道生成函数可能解决了它,它们太复杂了,我宁愿不进入它们。我正在寻找一种更简单的方法。
P.S。 如果它有帮助我记得这样的东西解决了它:
f(n) = 2 * f(n-1) + 3 * f(n-2) + 4
// consider f(n) = x ^ n
x ^ n = 2 * x ^ (n-1) + 3 * x ^ (n-2) + 4
然后你以某种方式计算x导致显式形式的递归公式,但我不记得了
答案 0 :(得分:12)
f(n) = 2 * f(n-1) + 3 * f(n-2) + 4
f(n+1) = 2 * f(n) + 3 * f(n-1) + 4
f(n+1)-f(n) = 2 * f(n) - 2 * f(n-1) + 3 * f(n-1) - 3 * f(n-2)
f(n+1) = 3 * f(n) + f(n-1) - 3 * f(n-2)
现在4号消失了。 如你所说,下一步是让f(n)= x ^ n
x^(n+1) = 3 * x^n + x^(n-1) - 3 * x^(n-2)
除以x ^(n-2)
x^3 = 3 * x^2 + x - 3
x^3 - 3 * x^2 - x + 3 = 0
找到x
的因素(x-3)(x-1)(x+1) = 0
x = -1 or 1 or 3
f(n) = A * (-1)^n + B * 1^n + C * 3^n
f(n) = A * (-1)^n + B + C * 3^n
现在使用您拥有的值找到A,B和C
f(1) = 2; f(2) = 8; f(3) = 26
f(1) = 2 = -A + B + 3C
f(2) = 8 = A + B + 9C
f(3) = 26 = -A + B + 27C
解决A,B和C:
f(3)-f(1) = 24 = 24C => C = 1
f(2)-f(1) = 6 = 2A + 6 => A = 0
2 = B + 3 => B = -1
最后
f(n) = 3^n - 1
答案 1 :(得分:5)
好的,我知道你不想生成函数(GF从现在开始)和所有复杂的东西,但我的问题结果是非线性的,简单的线性方法似乎不起作用。经过一整天的搜索,我找到了答案,希望这些发现对其他人有所帮助。
我的问题:a [n + 1] = a [n] /(1 + a [n])(即非线性(也不是多项式),但也不是完全非线性 - 它是一个有理差分方程)
RSolve[{a[n + 1] == a[n]/(1 + a[n]), a[1] == A}, a[n], n]
让我得到一个简单的{{a[n] -> A/(1 - A + A n)}}
。所以我想我会回去查找手工计算中的错误(它们有助于理解整个转换过程的工作原理)。无论如何,希望这有帮助。
答案 2 :(得分:2)
通常,没有用于将递归形式转换为迭代形式的算法。这个问题是不可判定的。例如,考虑这个递归函数定义,它定义了Collatz序列:
f(1) = 0
f(2n) = 1 + f(n)
f(2n + 1) = 1 + f(6n + 4)
目前尚不清楚这是否是一个定义明确的功能。如果存在可以将其转换为封闭形式的算法,我们可以决定它是否定义明确。
但是,对于许多常见情况,可以将递归定义转换为迭代定义。优秀的教科书“混凝土数学”的大部分内容都展示了如何做到这一点。当您猜测答案是什么时,一种常用的技术是使用归纳法。作为你的情况的一个例子,假设你相信你的递归定义确实给出了3 ^ n - 1.为了证明这一点,试着证明它对于基本情况是正确的,然后证明这个知识可以让你向上推广解决方案。您没有在帖子中添加基础案例,但我假设
f(0) = 0
f(1) = 2
鉴于此,让我们看看你的预感是否正确。对于0和1的特定输入,您可以通过检查验证该函数是否计算3 ^ n - 1.对于归纳步骤,让我们假设对于所有n'< n f(n)= 3 ^ n - 1.然后我们有
f(n) = 2f(n - 1) + 3f(n - 2) + 4
= 2 * (3^{n-1} - 1) + 3 * (3^{n-2} - 1) + 4
= 2 * 3^{n-1} - 2 + 3^{n-1} - 3 + 4
= 3 * 3^{n-1} - 5 + 4
= 3^n - 1
所以我们刚刚证明了这个递归函数确实产生了3 ^ n - 1。