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)

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

发布了44 篇原创文章 · 获赞 0 · 访问量 1695

猜你喜欢

转载自blog.csdn.net/qq_42067550/article/details/105557743