用数组代替递归极大提高算法时间
2016-05-21 16:29
375 查看
以斐波那契数列为例,常见的写法如下:
运行时间:当n == 40的时候是0.5秒
当n == 50 的时候,竟然到了惊人的57秒,只是多了10,时间上就变成了原来的100倍
而如果采用数组的话:
此时如果想要输出n==10000,只需要1毫秒!!!
究其原因在于,递归会重复计算很多数,而用数组的话,保存了之前的计算结果,则省去了大量的计算时间
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毫秒!!!
究其原因在于,递归会重复计算很多数,而用数组的话,保存了之前的计算结果,则省去了大量的计算时间
相关文章推荐
- linux 使用别名
- 【URAL 1486】Equal Squares
- Android之Window与WindowManager
- Sharepoint之配置向导创建DB失败
- 开始跟贺老师学编程了
- TCP/UDP的客户端/服务器编程
- [转]python 获取脚本所在目录
- BM算法详解
- Axure 万年历(日期选择下拉文本框)
- 【BZOJ-3931】网络吞吐量 最短路 + 最大流
- Adapter(适配器)-类对象结构型模式
- 微信开发之如何使用开发工具--weixin-java-tools
- Dagger2, Retrofit和MVP设计模式案例分析
- iOS设置启动图标
- UITableableView自定义cell
- 文件存储实现通讯录
- 利用Fragment + FragmentTabHost实现书签导航
- 学生信息管理修改过程
- android 软键盘弹出隐藏挤压界面等问题
- php 四种设计模式