【7】斐波那契数列
- 列表内容
- 时间限制:1秒
- 空间限制:32768K
牛客网题目链接:点击题目链接
题目描述
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。
vs2010代码
#include<stdio.h>
#include<time.h>
#include<Windows.h>
//class Solution {
//public:
// int Fibonacci(int n) { //复杂度太高
// if(n==0) return 0;
// if(n==1) return 1;
// return Fibonacci(n-1)+Fibonacci(n-2);
// }
//};
class Solution {
public:
int Fibonacci(int n) {
if(n==0) return 0;
if(n==1) return 1;
int a1=0,a2=1,sum=0;
for(int i=1; i!=n; i++)
{
sum=a2+a1;
a1=a2;
a2=sum;
}
return sum;
}
};
int main()
{
time_t t_start,t_end;
Solution s1;
int n;
while(1)
{
scanf("%d",&n);
t_start=clock();
//Sleep(3000); 输出为3000毫秒
printf("%d\n", s1.Fibonacci(n));
t_end=clock();
printf("%f\n",double(t_end-t_start));
}
}
方法二:迭代法
class Solution {
public:
int Fibonacci(int n) {
if(n<=0) return 0;
int fn0=0;
int fn1=1;
while(n-->0)
{
fn0+=fn1;
fn1=fn0-fn1;
}
return fn0;
}
};
n | fn0 | fn1 |
---|---|---|
初始 | 0 | 1 |
1 | fn0+fn1 | fn0 |
1 | 1 | 0 |
2 | 1 | 1 |
3 | 2 | 1 |
4 | 3 | 2 |
方法三:矩阵的幂方法
可使时间复杂度降低到O(log(n))
留待以后学习和补充。
其他知识
查看代码时间性能代码段1
计时工具1:计时到毫秒,可除以“CLOCKS_PER_SEC”转换为秒
#include <stdio.h>
#include <time.h>
#include<Windows.h>
time_t start = clock();
Sleep(3000); //win中单位为毫秒
time_t end = clock();
printf("the running time is : %f\n", double(end -begin)/CLOCKS_PER_SEC);
查看代码时间性能代码段2
计时工具2:计时到秒,下输出结果为3秒
#include <stdio.h>
#include <time.h>
#include<Windows.h>
time_t t_start, t_end;
t_start = time(NULL) ;
Sleep(3000); //win中单位为毫秒
t_end = time(NULL) ;
printf("time: %.0f s\n", difftime(t_end,t_start));