A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

    高手绕道,本人菜鸟一只,写一些经典问题,用来帮助刚入门的同学了解编程的代码优化问题!!
首先来看斐波那契数列的定义:
斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*);
然后我们一般会写出如下代码:
#include <stdio.h>
void main()
{
  int arr[20] = {0};
  int i=2;
  arr[0]=1;
  arr[1]=1;
  while( i<20 )
  {
        arr[i]=arr[i-1]+arr[i-2];
        i++;
  }
  for( i=0;i<20;i++)
  {
        printf("%5d",arr[i]);
    if( 0==(i+1)%4 )
        printf("\n");
  }
}
这个代码首先while循环判断了19次,接着for循环判断了20次,用来遍历输出,当然该代码时间复杂度为:n
有没有更加快的方法呢,当然有的!
看如下代码,时间复杂度仍然为:n
#include <stdio.h>
int main()
{
    int i,x1=1,x2=1;
    for(i=1;i<=10;i++)
    {
        printf("%10d   %10d",x1,x2);
        if(i%2==0) printf("\n");
        x1=x1+x2;
        x2=x2+x1;
    }
    return 0;
}
对比一下,第二个代码除了少了while循环之外,for循环缩短为n/2,当然了,时间复杂度没有改变,任然为n,不过在有限的计算呢,第二个代码要比第一个快的多!

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马