【问题标题】:Recursive calls for fibonacci sequence递归调用斐波那契数列
【发布时间】:2014-01-15 10:26:42
【问题描述】:

为了递归地找到斐波那契数,关系是 f(n)=f(n-1)+f(n-2)。 f(n) 的递归函数调用 f(n-i) 多少次(根据 n 和 i)?

我了解在跟踪递归调用时会生成二叉树。但是,似乎没有任何固定模式来确定对 f(n-i) 的递归调用次数。有什么建议吗?

例如,在寻找 f(5) 时,

f(5)=f(4)+f(3)  
f(5)=f(3)+f(2)+f(2)+f(1)  
f(5)=f(2)+f(1)+f(1)+f(0)+f(1)+f(0)+f(1)  
f(5)=f(1)+f(0)+f(1)+f(1)+f(0)+f(1)+f(0)+f(1)

这里调用 f(5)-1,f(4)-1,f(3)-2,f(2)-3,f(1)-5,f(0)-3 的次数。

谢谢。

【问题讨论】:

标签: recursion fibonacci


【解决方案1】:

序列 1、1、2、3、5、3 应该看起来很熟悉,因为忽略最后一个数字,它又是斐波那契数列。

c(x)fib(x)在计算fib(n)时被调用的次数。

  • c(x) = 0 对于所有 x > n,因为永远不会调用 fib(x)
  • c(n) = 1,因为 fib(n) 只被调用一次。
  • c(x) = c(x + 1) + c(x + 2) 对于所有 0 ,如 fib(x) em> 被 fib(x + 1)fib(x + 2) 调用。
  • c(0) = c(2),一种特殊情况,因为 fib(0) 是从 fib(2) 调用的 但不是 fib(1)

所以序列c(n), c(n-1), ..., c(2), c(1) 是斐波那契数列,c(0) 等于 c(2)

in而言,

  • fib(n - i) 被调用 fib(i + 1)0 ≤ i
  • fib(n - n) = fib(0) 被调用 fib(n - 1) 次。

【讨论】:

    猜你喜欢
    • 2011-07-27
    • 2012-11-19
    • 2016-11-07
    • 2012-02-16
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多