Recursion 如果我有时间处理较小的值,如何确定递归斐波那契算法处理较大值需要多长时间?

Recursion 如果我有时间处理较小的值,如何确定递归斐波那契算法处理较大值需要多长时间?,recursion,fibonacci,Recursion,Fibonacci,我使用了时间库,并计算了递归算法计算fib数(最多50个)所需的时间。给出这些数字,有没有一个公式可以用来确定计算fib(100)可能需要多长时间 较小值的时间: Fib(40): 0.316 sec Fib(80): 2.3 years Fib(100): ??? 这在很大程度上取决于使用的算法。直接计算需要固定的时间。无记忆的递归计算是指数计算,基数为φ。加上记忆,它会下降到对数时间 唯一适合您的数据的是指数时间。做基础数学 (2.3 years / 0.316 sec) ** (1.0

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

较小值的时间:

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

这在很大程度上取决于使用的算法。直接计算需要固定的时间。无记忆的递归计算是指数计算,基数为φ。加上记忆,它会下降到对数时间

唯一适合您的数据的是指数时间。做基础数学

(2.3 years / 0.316 sec) ** (1.0/40)
gives us
base = 1.6181589...
哎呀,看那个!不到10^4的一部分比phi多

设t(n)为计算Fib(n)的时间。 我们可以支持以下假设:

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

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

为什么t(n)公式和t(100)公式不同?我不太确定你从哪里得到80分。请你再解释一下这个公式好吗,这样我就可以知道到底发生了什么,它们是不同的,因为一个是t(n)的一般形式,定义为t(n-1);另一种是将这一单步公式合成为20步的跳跃。给定第一个方程,用t(n-1)求t(n+1)。然后扩展到t(n+2)。现在你看到模式了吗?我还是不太明白:/你能再给我看几个步骤吗?/根据第一个方程,用t(n-1)求t(n+1)。这是一个直接的代数代换。先试试看。