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)