【cython学习】分别使用python和cython运行斐波那契数列并计算时间

本文介绍使用Cython优化递归斐波那契数列算法的过程及显著提速效果,通过对比Python原生实现,Cython版本的运行速度提高了近100倍。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


本文使用递归斐波那契数列的算法,可以直观得看出使用cython后明显的速度提升

具体代码如下


fib.c

#include<stdio.h>
#include "fib.h"

long int fib(int n)
{
    if(n == 0 || n == 1){
        return 1;
    }
    else{
        return (fib(n - 1) + fib(n - 2));
    }
}

fib.h

long int fib(int n);

Fibonacci.pyx

cdef extern from "fib.h":
    long int fib(int n)

def fibonacci(n):
    return fib(n)

setup.py

from distutils.core import setup, Extension
from Cython.Distutils import build_ext

setup(
    cmdclass={'build_ext': build_ext},
    ext_modules=[Extension("fibonacci_with_cython", sources=["Fibonacci.pyx", "fib.c"])]
)

运行setup.py进行编译

$ python setup.py build_ext -i

编译生成的文件:
分别为:bulid目录、Fibonacci.c 和 fibnacci_with_cython.cp36-win_amd64.pyd
编译结果


编写run.py文件进行速度测试:

from fibonacci_with_cython import fibonacci as fib_cython
import time

def fib_python(n):
    if n == 0 or n == 1:
        return 1
    else:
        return fib_python(n - 1) + fib_python(n - 2)


if __name__ == '__main__':
    t1 = time.time()
    print("python:斐波那契数列第40项的结果为:{}".format(fib_python(40)))
    t2 = time.time()
    print("使用python运行递归斐波那契数列程序的运行时间为: {}s".format(t2 - t1))

    t3 = time.time()
    print("cython:斐波那契数列第40项的结果为:{}".format(fib_cython(40)))
    t4 = time.time()
    print("使用cython运行递归斐波那契是咧程序的运行时间为: {}s".format(t4 - t3))

运行结果:
运行结果


可以看出cython比python快了将近100倍的速度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值