美文网首页大数据 爬虫Python AI SqlPython小哥哥
提升Python效率——用循环机制代替递归函数!

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

作者: 14e61d025165 | 来源:发表于2019-07-23 15:42 被阅读4次

斐波那契数列

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

def fib(n):
if n==1 or n==2:
return 1
else:
return fib(n-1)+fib(n-2)
当然, 为了程序健壮性,加上 try...except...

Python资源共享群:484031800

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)
杨辉三角

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

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)
老铁们自己先想想该怎么写??

相关文章

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

    斐波那契数列 当年,典型的递归题目,斐波那契数列还记得吗? def fib(n):if n==1 or n==2:...

  • Python递归

    在python中,如阶乘运算,函数的自身循环调用等叫做递归。递归主要有递推和回溯两个阶段。递归的效率低,需要在进入...

  • 递归-求阶乘

    递归和普通函数调用一样是通过栈实现的 递归的作用 (1)代替多重循环(2)解决本来就是用递归形式定义的问题(3)将...

  • 25.Python的循环与递归

    通过让函数不断调用自身,直到函数可以代入给定的初值,这样可以实现递归结构。递归结构往往都可以用循环结构来代替,而且...

  • python学习4

    学廖雪峰老师的python教程笔记。 1、递归函数 函数内部调用该函数本身,比循环逻辑简单 注意防止栈溢出 尾递归...

  • Day11 递归函数、模块、迭代器和生成器

    递归函数 什么是递归在函数中调用本身的函数被称为递归函数 递归的作用:循环可以做的事情递归函数都可以做,如果循环可...

  • 2018-12-25 ES尾递归

    例子:阶乘函数,对比写法:尾递归、一般递归、for循环 注释部分是:运行对比的效率时间 let factorilT...

  • 递归实现 n!

    递归的特点: 自己调用自己 设定终止条件 优点:算法简单缺点:效率低下 用递归实现阶乘 n! 用 for 循环实现...

  • Day10递归函数、模块、迭代器、生成器

    一、递归函数 1、什么是递归函数 在函数中调用函数本身的函数就是递归函数。 2、递归的作用 循环能做的递归都能做 ...

  • day11recursion/module/tireator/g

    recursion 了解 1.什么是递归函数函数中调用函数本身的函数就是递归函数 递归的作用:循环能做的事情递归函...

网友评论

    本文标题:提升Python效率——用循环机制代替递归函数!

    本文链接:https://www.haomeiwen.com/subject/ywqalctx.html