高手绕道,本人菜鸟一只,写一些经典问题,用来帮助刚入门的同学了解编程的代码优化问题!!
首先来看斐波那契数列的定义:
斐波纳契数列以如下被以递归的方法定义: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,不过在有限的计算呢,第二个代码要比第一个快的多!
|
|