我曾在C++中使用递归函数来计算阶乘和斐波那契数列,发现计算阶乘的递归函数执行正常,速度与预期相符,但是计算斐波那契数列的递归函数明显较慢。为什么会出现这种情况呢?
递归方法:
unsigned long int fib_num(int n) //This is My code
{
switch (n)
{
case 1:
return 0;
break;
case 2:
return 1;
break;
default:
return fib_num(n - 1) + fib_num(n - 2);
break;
}
}
迭代方法:
first = 0;
second = 1
for(i = 0; i < num; i++)
{
cout<<"\n"<<first;
next = first + second;
first = second;
second = next;
}
fib_num(5)
会发出两个调用。他们各自会再次发出两个调用,以此类推,直到最终到达递归的基础部分。因此,每一层都会使调用数量翻倍,这使得时间复杂度为O(2^n)。 - Barmar