算法学习--printN
来源:互联网 发布:linux select pipe 编辑:程序博客网 时间:2024/06/15 02:49
最近跟着中国大学慕课http://www.icourse163.org/learn/ZJU-93001?tid=1002261004学习数据结构,完全是新手,索性记录一下学习的内容和做过的题,方便回顾和整理。
**问题:给出一个数N,打印这N个数,并统计时间。
两种方法:1、for 循环打印;2、递归打印**
package com.yanan.course1_1;/** * 测试打印N个数的不同方法及不同方法之间的区别 * Created by 张亚南 on 2017/10/12. *//** * 模板方法 */abstract class Template1 { abstract void printN(int n); protected void spendTime(int n) { long start = System.currentTimeMillis(); this.printN(n); long end = System.currentTimeMillis(); System.out.println("消耗时间是:" + (end - start)); }}class PrintN3 extends Template1 { @Override void printN(int n) { for (int i = 0; i < n; i++) {// System.out.println(i); } }}class Print4 extends Template1 { @Override void printN(int n) { if (n > 0) { printN(n - 1);// System.out.println(n); } }}public class TestPrintN1 { public static void main(String[] args) { int n = 10000; //int n = 100000;//StackOverFlow new Print4().spendTime(n); new PrintN3().spendTime(n); }}
打印结果是两个程序执行时间都是0,因为执行速度太快了。
把N设为N=100000(扩大一个数量级),结果递归打印方法StackOverFlow,说明空间不够。
所以想办法改变模板方法,让printN方法多执行几次。
package com.yanan.course1_1;/** * 测试打印N个数的不同方法及不同方法之间的区别 * Created by 张亚南 on 2017/10/12. *//** * 模板方法 */abstract class Template1 { abstract void printN(int n); protected void spendTime(int n) { long start = System.currentTimeMillis(); //多循环几次方法,扩大执行时间 for (int i = 0; i < 1000; i++) { this.printN(n); } long end = System.currentTimeMillis(); System.out.println("消耗时间是:" + (end - start)); }}class PrintN3 extends Template1 { @Override void printN(int n) { for (int i = 0; i < n; i++) {// System.out.println(i); } }}class PrintN4 extends Template1 { @Override void printN(int n) { if (n > 0) { printN(n - 1);// System.out.println(n); } }}public class TestPrintN1 { public static void main(String[] args) { int n = 10000; new PrintN4().spendTime(n); new PrintN3().spendTime(n); }}
这次执行完时间分别是
PrintN3:2;//循环
PrintN4:21;//递归
可见for循环的输出速度比较快。
总结:解决问题的效率和时间和空间的利用效率有关。
阅读全文
0 0
- 算法学习--printN
- 实现PrintN函数
- [数据结构] 基本概念 PrintN函数实现
- 陈越姥姥第一节数据结构课,printN
- PrintN的循环执行和递归执行
- 算法学习
- 算法学习
- 算法 学习
- 算法学习
- 算法学习
- 学习算法
- 算法学习
- 算法学习
- 算法 学习
- 算法学习
- 学习算法
- 算法学习
- 算法学习
- ImportError:No module named 'PIL'
- Java基础知识--try-catch-finally
- ORACLE undo表空间满查询占用sql
- hdu 5532【最长非递增子序列 时间复杂度 nlogn】
- kafka认证
- 算法学习--printN
- log 的 debug()、 error()、 info()方法的区别
- 数据结构第七周项目2--建立链队算法库
- cordova实现沉浸式(透明)状态栏效果
- 获取自己的经纬度
- Ubuntu网络连接
- el表达式解决反斜杠被转义的问题
- 【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置
- 矩阵学习