1.打印多个N,递归和循环实现
public class SJJG_1_1_printN1 {
public static void main(String[] args) {
printN(100000);
//printN2(10000);
}
public static void printN(int n)
{
for(int i=0;i<=n;i++)
{
System.out.println(i);
}
}
public static void printN2(int n)
{
if(n>0)
{
printN2(n-1);
}
System.out.println(n);
}
}
当数量级为100000时,递归很快就罢工了,而循环还能够运行,说明有时候递归对空间的占用是很恐怖的,虽然代码简直易懂,但在大数量级面前不要使用递归。
2.计算多项式,在给定点x处的值
public static double f(int n,int[] a,double x)
{
double p=a[0];
for(int i=1;i<=n;i++)
{
p+=a[i]*Math.pow(x,i);
}
return p;
}
第一种是正常计算
public static double f2(int n,int[] a,double x)
{
double p=a[n];
for(int i=n;i>=1;i--)
{
p=a[i-1]+x*p;
}
return p;
}
第二种是秦九韶算法
两种函数相比,秦九韶函数要慢好多
来测试一下程序的运行时间,用以下模板(java)
long startTime = System.currentTimeMillis(); //获取开始时间
doSomething(); //测试的代码段
long endTime = System.currentTimeMillis(); //获取结束时间
System.out.println("程序运行时间:" + (endTime - startTime) + "ms"); //输出程序运行时间
运行结果跑的太快了,根本不到一个tick,那么我们循环调用10000次,再除以10000,就可以看到运行1次的时间了,
以下为跑了100000次的结果,可以看到,两个程序相差了一个数量级