查找递归程序的添加步骤数

时间:2014-10-19 20:31:19

标签: algorithm recursion fibonacci

我正在进行一次抽样测验,似乎很难理解一个特定的问题。

  1. Fibonacci序列1,1,2,3,...可以从第一个开始迭代生成 两个(第0和第1个)并通过添加前两个来生成每个后续的一个。因此,如果 我们从前两个开始,第n个Fibonacci数,对于n≥2,可以由n - 1生成 补充。特别是,我们需要6次添加来生成第7个Fibonacci数。然而, 生成第7个Fibonacci数的递归程序需要:
  2. (a)增加20个 (c)增加5个 (b)增加13项 (d)18个补充

    答案:a)20个补充

    我不太明白他们是如何得到20个补充的。有没有快速的方法来找到斐波纳契序列的递归程序的添加?我尝试在c中找到我在网上发现的递归代码,但我不确定我会考虑添加步骤。

    我只是在寻找如何得出答案的解释。我将不胜感激任何帮助。

2 个答案:

答案 0 :(得分:1)

天真的递归公式将类似于:

F(0) = 1
F(1) = 1
F(n) = F(n-1) + F(n-2)

所以看待它的一种方法就是做替换......

F(7) = F(6) + F(5)
     = F(5) + F(4) + F(4) + F(3)
     = F(4) + F(3) + F(3) + F(2) + F(3) + F(2) + F(2) + F(1)
     = F(3) + F(2) + F(2) + F(1) + F(2) + F(1) + F(1) + F(0) + F(2) + F(1) + F(1) + F(0) + 1
     = F(2) + F(1) + F(1) + F(0) + F(1) + F(0) + 1 + F(1) + F(0) + 1 + 1 + 1 + F(1) + F(0) + 1 + 1 + 1 + 1
     = F(1) + F(0) + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1
     = 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1  

...并添加+符号。

或者,请注意,递归公式的每个步骤以F(1)和/或F(0)结束,并且每个步骤都具有值1.因此,对于任何n> 1,(在扩展公式之后)你将总计足够1来制作F(n)。因此,朴素递归公式将总是需要F(n)-1次加法(因此在F(7)= 21的情况下,即20次加法)。

答案 1 :(得分:0)

制作一张小表,其中包含第n个数字所需的添加数量。当你将数字f(x)计算为f(x-1)+ f(x-2)时,你需要增加来计算f(x-1)和f(x-2)的加法以及另外一个来计算f(x-1)这两个数字的总和。

n     additions
0     0
1     0
2     1 (= n(0) + n(1) + 1)
3     2 (= n(1) + n(2) + 1)
4     4 (= n(2) + n(3) + 1)
5     7 (= n(3) + n(4) + 1)
6    12 (= n(4) + n(5) + 1)
7    20 (= n(5) + n(6) + 1)