計算斐波那契數列的性能對比:Python,Java,Go

  本文采用遞歸辦法來計算斐波那契數列中的第38項,用於對於三種計算機語言的計算性能,這三種語言爲:Python,Java,Go。
  咱們採用遞歸法來求解斐波那契數列的第n項f(n),其算法描述以下:java

function fib(n)
    if n = 0 return 0
    if n = 1 return 1
    return fib(n − 1) + fib(n − 2)

對於公平起見,咱們利用三種程序計算f(38),運行100遍,獲得平均耗時,做爲性能對比。python

  Python程序以下:算法

# -*- coding: utf-8 -*-
# author: Jclian91
# place: Pudong Shanghai
# time: 16:15

import time

# recursive method
def rec_fib(n):
    if n <= 1:
        return n
    else:
         return rec_fib(n-1) + rec_fib(n-2)

time_cost = 0
for _ in range(100):
    # time cost of cursive method
    t1 = time.time()
    t = rec_fib(38)
    t2 = time.time()
    time_cost += (t2-t1)


print('結果:%s, 平均運行時間:%s'%(t, time_cost/100))

  Java程序以下:函數

import java.util.Date;

public class Main {

    // 主函數
    public static void main(String[] args) {
        double time_cost = 0;
        for (int i=0; i<100; i++) {
            Date start_time = new Date(); //開始時間
            int n = 38;
            rec_fib(n);
            Date end_time1 = new Date(); // 結束時間
            Long cost_time1 = end_time1.getTime() - start_time.getTime();  // 計算時間,返回毫秒數
            time_cost += cost_time1;
        }
        System.out.println(String.format("Average cost time is %.3fs.", time_cost*1.0/1000));
    }

    // 利用遞歸方法計算斐波那契數列的第n項
    public static int rec_fib(int n){
        if(n == 0)
            return 0;
        if(n ==1)
            return 1;
        else
            return rec_fib(n-1) + rec_fib(n-2);
    }

}

  Go語言以下:性能

// rec_fib
package main

import (
    "fmt"
    "time"
)

// 函數返回第n個斐波那契數
func rec_fib(num int) int {
    if num <= 1 {
        return num
    } else {
        return rec_fib(num-1) + rec_fib(num-2)
    }
}

func main() {
    var time_cost float64
    for i := 0; i < 100; i++ {
        t1 := time.Now()
        n := 38
        rec_fib(n)
        t2 := time.Now()
        time_cost += t2.Sub(t1).Seconds()
    }
    fmt.Printf("Average cost time: %f.\n", time_cost/100)
}

  在同一臺電腦上運行,獲得的結果以下:code

平均耗時(單位:秒) Python Java Go
/ 16.0151 0.1631 0.2398

能夠看到,Java在該程序的性能表現最好,Go語言的效率比Python稍慢一些,可是是同一數量級,Python的運行時間大約是Go語言的66.7倍。orm

  本次分享到此結束,感謝你們的閱讀~遞歸

相關文章
相關標籤/搜索