Py小郑 2022-01-29 20:30 采纳率: 96.6%
浏览 39
已结题

Python关于自带函数效率低的情况?

两段代码只有函数C不同 ,函数C用于计算组合数
其中一个方法利用常规的计算 另一种方法利用python自带的factorial函数来计算
不是说自带的函数运行起来会更快吗?为啥当数据逐渐增大到比较大的时候 后者好久不出结果
前者秒出 !?这到底是为啥
除此之外我试验过,如果单独调用两个函数进行比较,后者比前者快,这也印证了自带函数运行起来会快一些 ,可是放到整段代码里面(一个蓝桥杯题的完整题解),后者显得好差劲?半天没答案!恳请解答


N=int(input())

from math import factorial
def C(n,m):
    return int(factorial(n)/(factorial(m)*factorial(n-m)))

def find(j,N):
    l,r=2*j,N
    while l<=r:
        mid=(l+r)//2
        if C(mid,j)==N:
            print(int(mid*(mid+1)/2)+j+1)
            return True
        elif C(mid,j)>N:
            r=mid-1
        else:
            l=mid+1
    return False  
for i in range(16,-1,-1):
    if find(i,N):
        break


N=int(input())

def C(a,b):#阶乘函数
    res=1
    i,j=a,1
    while j<=b:
        res=res*i/j
        i-=1
        j+=1
    return res
def find(j,N):
    l,r=2*j,N
    while l<=r:#二分模板
        mid=(l+r)//2
        if C(mid,j)==N:
            print(int(mid*(mid+1)/2)+j+1)
            return True
        elif C(mid,j)>N:
            r=mid-1
        else:
            l=mid+1
    return False  
for i in range(16,-1,-1):
    if find(i,N):
        break


  • 写回答

2条回答 默认 最新

  • ~白+黑 Python领域新星创作者 2022-01-30 11:52
    关注

    自带函数也不一定对于你的问题是最好的实现,没必要纠结,如果觉得你自己的好用,那就用自己写的好了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月27日
  • 已采纳回答 2月19日
  • 创建了问题 1月29日

悬赏问题

  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序
  • ¥15 多址通信方式的抗噪声性能和系统容量对比
  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录