随笔 - 384  文章 - 0  评论 - 35  阅读 - 142万

函数的递归

递归函数:

1.递归函数就是函数内部会调用函数本身:

复制代码
def my_print(content, count):
    print(content)
    if count == 1:
        return
    my_print(content, count-1)

my_print('ok', 2)
'''
输出:
ok
ok
'''
复制代码

递归函数本身调用本身,这样很容易形成死循环,因此一定要有一个终止递归的条件,当满足条件时就会执行return语句

 

2.编写一个递归函数

2.1定义函数功能

def recursion(number):
    """
    计算number的阶乘
    :param number:
    :return:
    """

2.2找到终止条件

复制代码
#所有的递归函数,一定会有终止条件,如果不符合这个要求,那么就会进入死循环。函数的功能是计算阶乘,阶乘的终止条件是什么呢? 是1啊,1的阶乘是1,你不能计算0的阶乘,1是最小的可以求阶乘的整数,现在,假设调用函数传参number为1,代码该怎么写呢

def recursion(number):
    """
    计算number的阶乘
    :param number:
    :return:
    """
    if number == 1:
        return 1
复制代码

2.3甩锅

复制代码
#如果number不是1,该怎么办呢?答案很简单,甩锅,这就是说,现在你搞不定这个事情了,那你可以把锅帅给别人啊,你找到小明,告诉他: 老师让我计算number的阶乘,你现在计算number-1的阶乘,把结果告诉我,要快,不然老师生气了。

#你看,把锅甩给了小明,小明如果能算出来number-1的阶乘,你把他的答案乘以number,不就是number的阶乘了么,如果小明算不出来,你对老师也能有交代,是小明的过错,这就叫甩锅,这就是函数的递归调用

def recursion(number):
    """
    计算number的阶乘
    :param number:
    :return:
    """
    if number == 1:
        return 1

    next_recursion = recursion(number-1)   # 等待小明的结果
复制代码

2.4反甩锅

复制代码
#你把锅甩给小明,小明也不傻,他又把锅甩给了小刚,小刚表示很无辜,但事情还是要做,于是又甩给了小红,就这样,一个接着一个的甩,但是要注意,总会有甩不出去的时候,最后,锅甩到了小芳这里,小芳是个好姑娘,聪明乖巧,到她这里,需要计算1的阶乘,小芳心想,甩不出去了,而且也不用甩啊,1的阶乘就是1啊,多简单。

#于是,开始了第四个步骤,反甩锅,1的阶层等于1,小芳心想,我已经告诉你答案了,剩下的事情你们处理吧,这口锅沿着一开始的路线反向的甩了回来,每个人都得到了之前自己甩锅的人的答案,现在小明把number-1的阶乘告诉给你,你应该怎么办呢,你应该把结果乘以number,然后return这个结果,最终完成了老师的要求

def recursion(number):
    """
    计算number的阶乘
    :param number:
    :return:
    """
    if number == 1:
        return 1

    next_recursion = recursion(number-1)
    return next_recursion*number


if __name__ == '__main__':
    print(recursion(4))
复制代码

 

比如求最大公约数

公约数的计算gcd(a,b) = gcd(b,a mod b) (不妨设a>b 且r=a mod b ,r不为0)

def cal_gcd(fz,fm):
    mod = abs(fz) % fm
    if mod == 0:
        return fm
    elsereturn cal_gcd(fm, mod)

 

posted on   小小喽啰  阅读(285)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示