算法(algorithm)是指用来操作数据、解决程序问题的一组方法。
拿一个经典例子来体会下:
分别用递归方式和循环方式来实现这个方法(看起来虽然递归更简洁,但并不能看出效率高低)。可以根据运行时间看出效率高低,有兴趣可以多比较几组数据,那样能得出更精确的结论。
package com.lantian3.learn.learn.algorithm;
public class Sample{
public static void main(String[] args) {
int n = 7;
System.out.println("1" + new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()));
long number1 = getNumber(n);
System.out.println("2" + new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()));
long number2 = forGetNumber(n);
System.out.println("3" + new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()));
System.out.println(number1);
System.out.println(number2);
}
private static long getNumber(long n) {
if (n <= 1) {
return n;
} else {
return getNumber(n-1)+getNumber(n-2);
}
}
private static long forGetNumber(long n) {
if (n <= 1) {
return n;
}
int first = 0;
int second = 1;
for (int i = 0; i < n-1 ; i++) {
int sum = first + second;
first = second;
second = sum;
}
return second;
}
}
我测试的结果是递归的效率随着数字的增大,效率逐渐降低,且远远低于循环方式。这时候,我们可以说递归方式的时间复杂度要比循环方式高,此时,显然循环方式效率更高。
原文:https://www.cnblogs.com/phplantian/p/14606588.html