了解循环内函数调用的递归关系

时间:2016-01-13 08:48:41

标签: loops recursion

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

解决方案中的递归关系如下:

enter image description here

解决这个很容易,我的答案是51.

怀疑是为什么'1'(红色下划线)超出总和?

我理解如果它是渐近分析,我们会认为它是恒定时间因为我们只需要知道增长的本质,但是从这里我们需要一个准确的答案。

由于循环内部的这一行int fun (int n) { int x=1, k; if (n==1) return x; for (k=1; k<n; ++k) x = x + fun(k) * fun(n – k); return x; } ,x也循环,所以为什么它在求和之外呢?

2 个答案:

答案 0 :(得分:0)

大多数运行总和从0开始。但是,这个从1开始。该常数值是您加下划线的值。它来自

  

int x = 1 ,k;

答案 1 :(得分:0)

对于for循环中的每个'k',x将被替换为x的先前迭代值。因此,不会添加变量x,而只需添加替换。

考虑f(3),

表示k = 1, X = X + F(1)* F(2).... 1

再次循环运行, K = 2

X = X + F(2)* F(1)... 2

从1代替x,

X = X + F(2)* F(1)+ F(1)* F(2)。

为所有事情执行相同的操作..并在结尾处替换x = 1 ..你将获得 你已经给出的广义方程式。