求斐波那契数列的第n项
定义:这个数列从第3项开始,每一项都等于前两项之和,其中第一项为0,第二项为1
这是一个很经典的递归试题,我们很经典的写法如下
方法一,递归
unsigned long long Fibonacci(unsigned int val)
{
if (val == 0)
return 0;
if (val == 1)
return 1;
return Fibonacci(val - 1) + Fibonacci(val - 2);
}
但是其实他的效率很低,因为他很多的结点是重复的,而且由于递归的影响,开销也十分的大,如果我们输入100,他的速度就会变的十分的慢,所以我们解决的方法就是用循环代替递归,同时不重复计算一个结点,而是将他保存下来
方法二,循环
unsigned long long new_Fibonacci(unsigned int val)
{
if (val == 0)
return 0;
if (val == 1)
return 1;
int one = 0;
int two = 1;
int sum = 0;
for (int i = 2; i <= val; i++)
{
sum = one + two;
one = two;
two = sum;
}
return sum;
}
5508

被折叠的 条评论
为什么被折叠?



