使用斐波那契(Fibonacci)数列来测试各大语言的性能

这篇具有很好参考价值的文章主要介绍了使用斐波那契(Fibonacci)数列来测试各大语言的性能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

笔者使用最多的语言是C++,目前项目中在使用Go,也使用过不少其它语言,像Erlang,Python,Lua,C#等等。最近看到C#夺冠,首次荣获 TIOBE 年度编程语言,同时也看到网上有不少Java与C#之争的文章,于是就想要来做一个性能比较。

这里参与性能比较的是以下几门语言:Go、C#、Java、Python、Erlang。这些语言或语言标准库本身都提供了大数计算的支持,不需要自己实现大数计算或者找额外的库来实现大数计算。

笔者选取计算斐波那契(Fibonacci)数列来做性能比较,可能会有局限性,仅作参考。斐波那契数列是指这样一个数列:1,1,2,3,5,8,13,21,34,55,89……这个数列从第3项开始 ,每一项都等于前两项之和。为了达到一定计算量,但又不会费时太久,笔者以计算100万次斐波那契(Fibonacci)数列的耗时来作为依据。

一、测试环境

项目 参数
CPU 11th Gen Intel® Core™ i7-11700 @ 2.50GHz
内存 32G
硬盘 WD NVMe SSD
操作系统 Windows 10 22H2

二、各语言源码

1、Go源码

GO版本为1.12.5

package main

import (
	"fmt"
	"math/big"
)

func main() {
	a := big.NewInt(1)
	b := big.NewInt(1)
	sum := big.NewInt(0)
	for i := 0; i < 1000000; i++ {
		sum = sum.Add(a, b)
		b.Set(a)
		a.Set(sum)
	}
	fmt.Println(sum)
}

2、C#源码

C#选择的是.net 8.0.101

using System.Numerics;

BigInteger a = new BigInteger(1);
BigInteger b = new BigInteger(1);
BigInteger sum = new BigInteger(0);
for (int i = 0; i < 1000000; i++)
{
	sum = a + b;
	b = a;
	a = sum;
}

Console.WriteLine(sum);

3、Java源码

Java版本是21.0.1

import java.math.BigInteger;

public class t {
	public static void main(String[] args) {
		BigInteger a = BigInteger.valueOf(1);
		BigInteger b = BigInteger.valueOf(1);
		for (int i = 0; i < 1000000; i++) {
			BigInteger sum = a.add(b);
			b = a;
			a = sum;
		}
		System.out.println(a.toString());
	}
}

4、Python源码

python版本是3.11.7

import sys

sys.set_int_max_str_digits(1000000)
a = 1
b = 1
sum = 0
for i in range(0, 1000000):
    sum = a + b
    b = a
    a = sum

print(sum)

5、Erlang源码

erlang版本是:otp_win64_26.2.1

-module(app).

-export([main/1]).

fibonacci(A, B, 1) ->
    A+B;
fibonacci(A, B, N) ->
    fibonacci(A+B, A, N-1).

main(_) ->
    V = fibonacci(1,1, 1000000),
    io:format("~w", [V]),
    ok.

二、使用VSCode Code Runner测试

由于有些语言有缓存,所以都以多次执行结果较少耗时的为准:

1. Go

go run main.go

使用斐波那契(Fibonacci)数列来测试各大语言的性能,编程语言,go,java,C#,python,erlang,fibonacci,语言性能

2. C#

dotnet run

使用斐波那契(Fibonacci)数列来测试各大语言的性能,编程语言,go,java,C#,python,erlang,fibonacci,语言性能

3. Java

javac t.java && java t

使用斐波那契(Fibonacci)数列来测试各大语言的性能,编程语言,go,java,C#,python,erlang,fibonacci,语言性能

4. Python

set PYTHONIOENCODING=utf-8 && python.exe -u main.py

使用斐波那契(Fibonacci)数列来测试各大语言的性能,编程语言,go,java,C#,python,erlang,fibonacci,语言性能

5. Erlang

escript app.erl

使用斐波那契(Fibonacci)数列来测试各大语言的性能,编程语言,go,java,C#,python,erlang,fibonacci,语言性能

三、使用命令行测试

1. go

time go run main.go

使用斐波那契(Fibonacci)数列来测试各大语言的性能,编程语言,go,java,C#,python,erlang,fibonacci,语言性能
使用go build main.go编译成exe后再运行time ./main

使用斐波那契(Fibonacci)数列来测试各大语言的性能,编程语言,go,java,C#,python,erlang,fibonacci,语言性能

2. C#

time dotnet run
使用斐波那契(Fibonacci)数列来测试各大语言的性能,编程语言,go,java,C#,python,erlang,fibonacci,语言性能

直接执行生成的exe:

使用斐波那契(Fibonacci)数列来测试各大语言的性能,编程语言,go,java,C#,python,erlang,fibonacci,语言性能

3. Java

time java t

使用斐波那契(Fibonacci)数列来测试各大语言的性能,编程语言,go,java,C#,python,erlang,fibonacci,语言性能

4. Python

time python main.py

使用斐波那契(Fibonacci)数列来测试各大语言的性能,编程语言,go,java,C#,python,erlang,fibonacci,语言性能

5. Erlang

先编译erlc app.erl,再执行time erl -noshell -s app main 0 -s init stop

使用斐波那契(Fibonacci)数列来测试各大语言的性能,编程语言,go,java,C#,python,erlang,fibonacci,语言性能

四、结果统计

语言 Code Runner结果 Code Runner 执行的命令 命令行编译运行结果 命令行编译运行的命令 命令行直接运行结果 命令行直接运行的命令
Go 3.548秒 go run main.go 3.539秒 time go run main.go 3.068秒 time ./main
C# 10.295秒 dotnet run 10.075秒 time dotnet run 9.255秒 time ./ConsoleApp
Java 10.654秒 javac t.java && java t / / 9.814秒 time java t
Python 5.939秒 set PYTHONIOENCODING=utf-8 && python.exe -u main.py 5.943秒 time python main.py / /
Erlang 13.353秒 escript app.erl / / 12.836秒 time erl -noshell -s app main 0 -s init stop

从结果可以看出,Go作为后起的名门之秀,在此项测试中是遥遥领先;C#在没有使用.net 8的AOT特性的情况下,依旧是略胜Java一筹,相信如果使用了AOT,可能会更快,但是其编译速度相比JAVA有点拖后腿;Erlang作为老牌并发编程语言,虽然近几年不断发展,但是在执行效率上还是有待提高;让人大跌眼镜的是Python,在传统认知中Python是应该比C#和JAVA慢的,但是出人意料的是比他们俩都快不少。文章来源地址https://www.toymoban.com/news/detail-799166.html

到了这里,关于使用斐波那契(Fibonacci)数列来测试各大语言的性能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于C语言用递归思想实现斐波那契数列的函数设计

    用C语言并利用递归思想实现设计一个程序,完成斐波那契数列的函数设计,利用递归实现!

    2024年04月08日
    浏览(30)
  • 斐波那契数列、青蛙跳台阶、汉诺塔(C语言Java通用)、递归练习题

    Write once,Runanywhere. 🔥🔥🔥 本派文章详细斐波那契数列、青蛙跳台阶、汉诺塔(C语言Java通用)、递归练习题。 💥 💥 💥 如果你觉得我的文章有帮助到你,还请【关注➕点赞➕收藏】,得到你们支持就是我最大的动力!!! 💥 💥 💥 ⚡ 版权声明:本文由【马上回来了】原创、

    2023年04月08日
    浏览(27)
  • C#面:使用 IEnumerable 实现斐波那契数列生成

    斐波那契数列(Fibonacci sequence),又称黄金分割数列 [1],因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称“兔子数列”, 其数值为:1、1、2、3、5、8、13、21、34…… 在数学上,这一数列以如下递推的方法定z义: F(0)=1,F(1)=1, F(n)=F(n - 1)+F(n

    2024年04月16日
    浏览(31)
  • Python斐波那契数列

    斐波那契数列是一个经典的数学问题,在 Python 中可以使用多种方法来实现,下面是几个常见的实现方式: 1. 使用递归 ```python def fibonacci_recursive(n):     if n = 1:         return n     else:         return fibonacci_recursive(n-1) + fibonacci_recursive(n-2) ``` 2. 使用循环 ```python def fibonacci_i

    2024年02月02日
    浏览(31)
  • JAVA-斐波那契数列

    输入一个整数 n ,求斐波那契数列的第 n 项。 假定从 0 开始,第 0 项为 0 。 数据范围 0≤n≤39 样例

    2024年02月10日
    浏览(32)
  • 斐波那契数列应用2

    目录 斐波那契数列应用2 程序设计 程序分析  系列文章 【问题描述】定义如下序列:f(1)=1,f(2)=1;f(n)=(A*f(n-1)+B*f(n-2))mod7     给定A和B,请你计算f(n)的值。 【输

    2023年04月10日
    浏览(39)
  • 斐波那契数列verilog实现

     前言:         该题为睿思芯科笔试题,笔试时长20分钟。         用代码实现斐波那契数列,代码需要对对enable敏感,当enable为高几周期,sum在enble为高的下一周期输出第几个斐波那契数,斐波那契数列的生成是后一个数字是前两个数字之和,如下序列:0、1、1、

    2024年02月13日
    浏览(32)
  • c 斐波那契数列输出

    在C语言中,我们可以通过递归或循环的方法来实现斐波那契数列的输出。首先,我们需要明白斐波那契数列的定义:任一项数字是前两项的和(最开始两项均定义为1)。下面是具体的实现方式。 使用递归方法: #include stdio.h int main() {     int m = 0, n = 1, sum;     printf(\\\"请输入

    2024年02月06日
    浏览(32)
  • 矩阵快速幂&斐波那契数列

    矩阵快速幂: 快速地求出斐波那契数列中的每一项 可以快速地求出斐波那契数列的前n项的和 首先我们来看如何快速地求出斐波那契数列的第n项 设 F n = [ f n , f n + 1 ] F_n = [f_n,f_{n+1}] F n ​ = [ f n ​ , f n + 1 ​ ] ,构造这一个行向量,那么对于此,我们思考 F n F_n F n ​ 乘一个

    2024年02月06日
    浏览(32)
  • 【动态规划】斐波那契数列模型

    冻龟算法系列之斐波那契数列模型 动态规划(英语:Dynamic programming,简称 DP) ,是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质

    2024年02月09日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包