Algorithm 如何处理循环递归关系?
当出现这样的问题时,我会陷入困境: 假设我想找到Algorithm 如何处理循环递归关系?,algorithm,language-agnostic,dynamic-programming,Algorithm,Language Agnostic,Dynamic Programming,当出现这样的问题时,我会陷入困境: 假设我想找到foo(n)。我知道一个关于foo(n)的公式,但它在计算中既包括foo(n-1)又包括foo(n+1) 若我试图用一个简单的递归函数来解决这些问题,那个么这两个函数调用将再次通过它们调用父函数。这将导致无限循环!e、 g.试图解决foo(n)将涉及调用foo(n+1),这将调用foo(n),以此类推 是否有一种通用技术来解决这种特殊类型的问题,而不依赖于对foo(n)从foo(n-1)和foo(n+1)中精确计算foo(n) 编辑: 在我的例子中
foo(n)
。我知道一个关于foo(n)
的公式,但它在计算中既包括foo(n-1)
又包括foo(n+1)
若我试图用一个简单的递归函数来解决这些问题,那个么这两个函数调用将再次通过它们调用父函数。这将导致无限循环!e、 g.试图解决foo(n)
将涉及调用foo(n+1)
,这将调用foo(n)
,以此类推
是否有一种通用技术来解决这种特殊类型的问题,而不依赖于对foo(n)
从foo(n-1)
和foo(n+1)
中精确计算foo(n)
编辑:
在我的例子中,我知道对于一个特定的
n
,我知道foo(n)=0
和foo(n-1)=1
,我想计算foo(n-2)
和0
之间的所有值,实际上解决这个问题的方法非常简单。如果你有这样的关系:
f(n) = f(n+1) - f(n-1)
你所要做的就是从每个内部项中减去正的k
,这样就没有任何项是高于n
的函数。例如,在这种情况下,k
将是1
:
f(n-1) = f(n) - f(n-2)
然后重新排列得到:
f(n) = f(n-1) + f(n-2)
你可能会认出它是斐波那契序列。这只是一个例子,不管f(n)
,f(n+1)
和f(n-1)
之间的关系是什么,只要它是一个可以反转的函数,你总是可以将函数参数转换成f(n)
,f(n-1)
和f(n-2)
。另一个例子:
f(n) = f(n+1) / f(n-1)
f(n-1) = f(n) / f(n-2)
f(n) = f(n-1) * f(n-2)
更一般地说,如果您有:
f(n) = H[f(n+1), f(n-1)]
然后您可以将其转换为:
f(n) = H-1[f(n-1), f(n-2)]
f(n)=H-1[f(n-1),f(n-2)]
其中H是一个函数,H-1是它的逆函数
这假设在下限处有两个值,并希望向上移动。(例如,
f(0)=1,f(1)=1
)。如果你有上界并且想退出,那么你应该加k
而不是减,这不是一个定义明确的问题,无论从数学上还是计算上。您试图计算什么?foo停止有上限吗?“编程中如何解决这些问题?”例如,指定s.th。比如最大递归深度。@G.Bach是的,这是关于基本情况的一个很好的观点。那么我们现在在同一页了?问题中的信息太少,无法回答。我完全不知道为什么这个问题被否决,或者为什么人们说需要两个边界,并且必须一路上下。这似乎是一种人们不知道问题答案的情况,因此得出错误的假设Suser2732146没有说明f(n)是f(n+1)和f(n-1)的和、积、差还是其他。虽然我预计他最终会这么说,但我们现在还不知道。@G.Bach,但这并不重要。不管是什么关系,你都可以做同样的事情。这只是一个例子。如果它是f(n)=f(n+1)f(n-1)
,你同样可以将它转换为f(n-1)=f(n)f(n-2)
给出f(n)=f(n-1)/f(n-2)