时间和空间复杂度

什么是时间复杂度

算法(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;
    }
}

我测试的结果是递归的效率随着数字的增大,效率逐渐降低,且远远低于循环方式。这时候,我们可以说递归方式的时间复杂度要比循环方式高,此时,显然循环方式效率更高。

posted @ 2021-04-01 15:33  练武不练功到头一场空  阅读(57)  评论(0)    收藏  举报