您的位置:首页 > 其它

用数组代替递归极大提高算法时间

2016-05-21 16:29 375 查看
以斐波那契数列为例,常见的写法如下:

import java.util.Scanner;

public class Main {
public static int getNum(int n)
{
if(n == 1 || n == 2){
return n;
}
else
return getNum(n-1) + getNum(n-2);
}
public static void main(String[] args) {
long start = System.currentTimeMillis();
getNum(50);
long end = System.currentTimeMillis();
System.out.println(end - start);
}
}


运行时间:当n == 40的时候是0.5秒

当n == 50 的时候,竟然到了惊人的57秒,只是多了10,时间上就变成了原来的100倍

而如果采用数组的话:

import java.util.Scanner;

public class Main {
public static int a[] = new int[10002];
public static void main(String[] args) {
long start = System.currentTimeMillis();
a[1] = 1;
a[2] = 2;
for (int i = 3; i < 10001; i++) {
a[i] = a[i - 1] + a[i - 2];
}
System.out.println(a[10000]);
long end = System.currentTimeMillis();
System.out.println(end - start);
}
}


此时如果想要输出n==10000,只需要1毫秒!!!

究其原因在于,递归会重复计算很多数,而用数组的话,保存了之前的计算结果,则省去了大量的计算时间
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: