资讯专栏INFORMATION COLUMN

提升Python效率——用循环机制代替递归函数

Reducto / 1004人阅读

摘要:斐波那契数列当年,典型的递归题目,斐波那契数列还记得吗当然为了程序健壮性,加上兄弟输入正整数哈兄弟别输入或负数呀兄弟,超过了最大递归深度是的,无论时间还是空间复杂度,递归真的是不太好使哈这是递归的写法我稍微解释三点为啥是,因为,斐波

斐波那契数列

当年,典型的递归题目,斐波那契数列还记得吗?

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

当然, 为了程序健壮性,加上try...except...

def fib(n):
    if isinstance(n, int):
        print("兄弟,输入正整数哈")
        return
    
    try:
        if n==1 or n==2:
            return 1
        elif n <= 0:
            print("兄弟别输入0或负数呀")
        else:
            return fib(n-1)+fib(n-2)
    except RecursionError:
        print("兄弟,超过了最大递归深度"

是的,无论时间还是空间复杂度,递归真的是不太好使哈!这是递归的写法:

def fib(n):
    if n==1 or n == 2:
        return 1
    a, b = 1, 1
    for i in range(2, n):
        a, b = b, a+b
    return b

我稍微解释三点:

为啥是range(2, n),因为,斐波那契数列从1开始,所以fib(n)就是数列的第n
由于前两项都为1,所以要少两项,为range(2, n)(要循环n-2次)

a, b = b, a+b这里你也许也有困惑,我简单说说,一般Python解释器会将逗号分隔的变量直接看做一个元组,
又因为,解释器先执行等式右边的,所以,这样相当于元组拆包

a, b = b, a+b这句话的精髓在于,在等式右边将b视为fib(n-2),将a+b视为fib(n-1)

杨辉三角

写一个函数,求杨辉三角形,第i行,第j列的值
fun(0, 0) = 1
fun(5, 2) = 10


同样,先写递归写法(我这里不考虑特殊情况了,时间有限):

def YH_tri(a, b):
    if a == b or b == 0:
        return 1
    else:
        return YH_tri(a-1, b)+YH_tri(a-1, b-1)

老铁们自己先想想该怎么写??

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/45235.html

相关文章

  • Python高级语法之:一篇文章了解yield与Generator生成器

    摘要:与子生成器是开始引入的新特性。我们把这种一个生成器中调用的另一个生成器叫做子生成器,而这个子生成器由关键字生成。由于子生成器很常用,所以引入了新的语法来简化这个代码。下次,会继续对之前的结果进行乘方,直到结果超过为止。 Python高级语法中,由一个yield关键词生成的generator生成器,是精髓中的精髓。它虽然比装饰器、魔法方法更难懂,但是它强大到我们难以想象的地步:小到简单的...

    kamushin233 评论0 收藏0
  • PHP的性能优化方法总结

    摘要:内置函数的性能优劣。产生额外开销的错误抑制符号,最好别用不管是性能优化和项目的健壮性等方面。在方法中递增局部变量,速度是最快的。类似的方法调用所花费的时间接近于次的局部变量递增操作。 什么情况之下,会遇到PHP性能问题?1:PHP语法使用不恰当。2:使用PHP语言做了它不擅长的事情。3:使用PHP语言连接的服务不给力。4:PHP自身的短板(PHP自身做不了的事情)。5:我们也不知道的问...

    gekylin 评论0 收藏0
  • Function类型

    摘要:类型类型是的引用类型之一通过类型创建对象在中函数也以对象的形式存在每个函数都是一个对象构造函数函数除了用函数定义语句和字面量表达式两种方式定义之外还可以通过类型进行定义函数的参数和函数体都是以字符串形式传递给的通过类型定义函数的效率远不如函 Function类型 Function类型是JS的引用类型之一 通过Function类型创建Function对象在JS中 函数也以对象的形式存在...

    jackzou 评论0 收藏0
  • 一次阿里面试后对函数本质的理解

    摘要:函数使用函数的使用主要有两种闭包闭包的本质是对共享变量的操作,典型运用是观察者模式备忘录模式普通封装,复用。参考阿里博客你可能不知道的事基础篇总结要写好一个项目需要兼容,性能,安全等。 一次阿里面试后对函数本质的理解 写在前面 环境:阿里的在线编程系统允许面试官在线考察面试者的编程能力. 考点:编程和理论. 编程:分为技术自驱力、异步操作、编程风格(颗粒小)、变量作用域、DOM操作...

    liuyix 评论0 收藏0
  • 一次阿里面试后对函数本质的理解

    摘要:函数使用函数的使用主要有两种闭包闭包的本质是对共享变量的操作,典型运用是观察者模式备忘录模式普通封装,复用。参考阿里博客你可能不知道的事基础篇总结要写好一个项目需要兼容,性能,安全等。 一次阿里面试后对函数本质的理解 写在前面 环境:阿里的在线编程系统允许面试官在线考察面试者的编程能力. 考点:编程和理论. 编程:分为技术自驱力、异步操作、编程风格(颗粒小)、变量作用域、DOM操作...

    superw 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<