如果我有时间使用较小的值,如何确定递归的斐波那契算法将采用更长的值多长时间?

时间:2016-02-06 01:27:48

标签: recursion fibonacci

我已经使用了时间库,并计算了递归算法计算最多50个纤维数的时间。给出这些数字,是否有一个公式可以用来确定计算纤维可能需要多长时间( 100)?

较小值的时间:

Fib(40): 0.316 sec
Fib(80): 2.3 years
Fib(100): ??? 

1 个答案:

答案 0 :(得分:1)

这在很大程度上取决于使用的算法。直接计算需要恒定的时间。没有记忆的递归计算是指数的,具有phi的基础。添加memoization到它,它会下降到对数时间。

唯一能够适合您数据的是指数时间。做基本的数学......

(2.3 years / 0.316 sec) ** (1.0/40)
gives us
base = 1.6181589...

哎呀,看看那个!比phi!还要少于10 ^ 4的一部分。

设t(n)是计算Fib(n)的时间。 我们可以支持这个假设

t(n) = phi * t(n-1)
Therefore,
t(100) = phi^(100-80) * t(80)

我相信你可以从这里结束。