题目:写一个函数,输入n,求斐波拉契(Fibonacci)数列的第n项,斐波拉契定义
f(n)= 0 ,n=0
1 ,n=1
f(n-1)+f(n-2) ,n>1
思路:
1,递归,效率很低 O(n^m)
2,循环,实用 O(n)
3,数学公式,代码复杂还未完成,效率高,O(logn)
源代码
#include "stdio.h"
#include "stdlib.h"
/*long Fibonacci(int n)
{
if(n==0)
return 0;
if(n==1)
return 1;
if(n>1)
return Fibonacci(n-1)+Fibonacci(n-2);
}*/
long Fibonacci(int n)
{
int f1=1;
int f0=0;
if(n==0)
return f0;
if(n==1)
return f1;
long one=f1,two=f0,result;
for(int i=2;i<=n;i++)
{
result=one+two;
two=one;
one=result;
}
return result;
}
void main()
{
int n;
printf("输入n:");
scanf("%d",&n);
long s=Fibonacci(n);
printf("结果;%ld",s);
}
结果
输入n:10
结果;55