计算斐波那契数列的性能对⽐:Python,Java,Go
  本⽂采⽤递归办法来计算斐波那契数列中的第38项,⽤于对于三种计算机语⾔的计算性能,这三种语⾔为:Python,Java,Go。  我们采⽤递归法来求解斐波那契数列的第n项f(n),其算法描述如下:
function fib(n)
if n = 0 return 0
if n = 1 return 1
return fib(n − 1) + fib(n − 2)
对于公平起见,我们利⽤三种程序计算f(38),运⾏100遍,得到平均耗时,作为性能对⽐。
  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 = Time() - Time();  // 计算时间,返回毫秒数
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 (
python printf输出格式"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)
}
  在同⼀台电脑上运⾏,得到的结果如下:
平均耗时(单位:秒)Python Java Go
/16.01510.16310.2398
可以看到,Java在该程序的性能表现最好,Go语⾔的效率⽐Python稍慢⼀些,但是是同⼀数量级,Python的运⾏时间⼤约是Go语⾔的66.7倍。
  本次分享到此结束,感谢⼤家的阅读~