【7】斐波那契数列

【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;
    }
};
nfn0fn1
初始01
1fn0+fn1fn0
110
211
321
432

方法三:矩阵的幂方法
可使时间复杂度降低到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));

提交通过图片

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值