Python 进阶:递归算法的关键点剖析(阶乘,斐波那契数列案例)

Python 中,递归是一种很多人都头晕的算法。
那在使用这个算法的时候,怎样可以更好地捋清楚思路呢?

首先我们来看案例:

一、求阶乘

传统实现方式:

def fact_for (x):
    r = 1
    for i in range(1,x+1):
        r *= i
    return r

递归实现方式:

def fact (x):
    if x!=1:
        r = x*fact(x-1)
        return r
    else:
        return x

二、斐波那契数列

传统实现方法:

def fibonacci_for (x):
    if x < 1:
        return 0
    elif x == 1:
        return 1
    elif x == 2:
        return 1
    else:
        a = 1
        b = 1
        for i in range(2,x):
            c = a+b
            a,b = b,c
        return c

递归实现方式:

def fibonacci (x):
    if x < 1:
        return 0
    elif x == 1:
        return 1
    elif x == 2:
        return 1
    else:
        return fibonacci (x-1)+fibonacci (x-2)

三、递归的要点分析

1. 递归需要函数自己调用自己

比如前面 r = x*fact(x-1) 语句,和 fibonacci (x-1)+fibonacci (x-2) 语句。

2. 递归需要有个停止条件(防止无限递归)

比如求阶乘的时候,当计算到 1 的时候,就要结束了。

3. 递归需要关注通项式

比如斐波那契数列的核心,就是第 n 个元素的值,为 n-1 和 n-2 这两个值的和。

4. 注意点

Python 中默认的递归最大层数应该是 100 层。
当我们需要超过这个层数的时候,可以用以下语句设置:

import sys
sys.setrecursionlimit(100)

后面找时间再多补充几个案例,请期待。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值