兩個斐波拉切數列運算的時間複雜度

有人提出了遞歸算法的時間複雜度問題,的確如此,遞歸的時間複雜度是隨着數量級成指數增加的。java

如今補充一個時間複雜度線性增加的方法。多謝朋友的指正。算法

import java.util.Scanner;

/**
 * Created by Administrator on 2018-02-15.
 */
public class Fibonacci {
    public static long FibonacciQty(int n) {
        long t1,t2;
        if(n == 1 || n == 2) {
            return 1;
        }else {
            t1 = FibonacciQty(n-1);
            t2 = FibonacciQty(n-2);
            return t1+t2;
        }
    }
    public static long FibonacciQty2(int n) {
        long t1 = 1;
        long t2 = 1;
        if(n == 1 || n == 2) {
            return 1;
        }else {
            for (int i = 2;i < n - 1;i++) {
                t2 = t1 + t2;
                t1 = t2 - t1;
            }
            return t1+t2;
        }
    }
    public static void main(String[] args) {
        System.out.println("遞推算法求解兔子產仔問題!");
        System.out.print("請先輸入時間:");
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        long num = Fibonacci.FibonacciQty2(n);
        System.out.println("通過"+n+"月的時間,共能繁殖成"+num+"對兔子!");
}
}
相關文章
相關標籤/搜索