我使用递归算法使用java生成斐波纳契数。 该算法花费了太多时间来简单地添加2个数字(交叉10个数字)而不是人类。 Windows计算器甚至可以在几秒钟内执行大数字(Ex:7 ^ 1000)的功能。 Windows计算器和我的Fibonacci算法都可以在同一个Windows i5处理器上运行。
为什么我的Fibonacci算法花费了太多时间进行简单的添加?
答案 0 :(得分:0)
fib
的经典递归实现是这样的:
int fib(int n) {
if (n < 2)
return n;
else
return fib(n - 1) + fib(n - 2);
}
这个函数可以多次递归,它可以作为一个简单的基准来衡量各种语言的函数调用效率,时间复杂度为 O(φ n )
你想要一个像魅力一样的迭代实现:
int fib(int n) {
int a, b, c;
if (n < 2)
return n;
for (a = 0, b = 1; n > 1; n--) {
c = a + b;
a = b;
b = c;
}
return b;
}
答案 1 :(得分:0)
斐波纳契数呈指数增长,通常计算机可以在一秒内迭代n的10 ^ 8-10 ^ 9个值。如果您要执行递归函数,则可能是该函数正在使用很多值,因此程序执行缓慢。
此外,运行时不仅取决于处理器,还有其他各种因素(例如RAM,编程语言,内存等)。要检查程序的运行时,会使用诸如Big-Oh Notations之类的各种概念。