我想知道如何解决2个变量中的递归关系。我想解决下面的关系:
F(n,m) = F(n-1,m) + F(n,m-1) + 1
初始条件:
F(m,0) = m
F(0,n) = n
F(0,0) = 0
答案 0 :(得分:1)
F(n,m)
{
if (n==0)&&(m==0)
return 0
else if (n==0)
return m
else if (m==0)
return n
else
return F(n-1,m) + F(n,m-1) + 1
}
答案 1 :(得分:0)
只有参数(≦n,≦m)出现,可以排除n或m为0,所以如果你能保持n×m的表是最佳复杂度:O(n.m)。
有人看到F(n - 1,m - 1)都被称为F(n - 1,m)和F(n,m - 1),所以天真的解决方案具有更高的复杂度。 / p>
不想破坏寻找算法的乐趣,只有一些提示:
F(n, m) = F(m, n) so you may use n ≦ m.
(table, result) = F'(table, n, m) caching of results in recursive function
我个人有时喜欢从迭代的非功能性过程开始填充表格,从0开始。然后将其转换为功能表示法。对于复杂性,迭代过程已经足够了。