吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1299|回复: 4
收起左侧

[Python 转载] 【笔记】递归函数

[复制链接]
cccyyys 发表于 2021-6-20 00:46
递归函数
概念:简单来讲,就是自己调用自己的函数,在函数体内直接或者间接的调用自己。需要注意的是递归函数需要包含两个部分,1、终止字符,用来停止调用,一般用于返回值。2、递归步骤,把第你、步和第n-1补结合起来。
[Python] 纯文本查看 复制代码
def test01():#这是一个没有终止字符的函数
    print('test01()')
    test01()

test01()

以上示例就是一个没有终止字符的函数,会因为栈内存不足导致程序崩溃。
[Python] 纯文本查看 复制代码
def test01(n):
    print('test01:',n)
    if n==0:
        print('程序结束')
    else:
        test01(n-1)
        print(n)

test01(4)

运行结果:test01: 4
test01: 3
test01: 2
test01: 1
test01: 0
程序结束
1
2
3
4
程序结束
这就是一个简单的递归函数了,我们发现"test01:n"和"n"中的n值是相反的,来分析一下这个函数的运行步骤,当n=4时,调用函数test01(4),栈中会产生一个栈帧,然后打印test01: 4,进行判断,n>0,因此会调用函数test01(3),这是test01(4)这个函数是暂时挂起的状态,先运行test01(3),好了,在test01(3)里,先打印出test01: 3,然后进行判断,n还是大于0,继续调用函数test01(n-1),也就是test01(2),同样这是test01(3)一样会暂时挂起,以此类推,当运行test01(0)时,同样先打印test01: 0,进行判断,n=0,打印“程序结束”,然后test01(0)这个函数就结束了,然后再返回来运行test01(1),打印n的值,也就是1,这时test01(1)也已经运行结束了,就会继续返回运行test01(2),打印2....以此类推,会发现最后出现的n的值和刚开始打印n的值是相反的。
练习:利用递归函数计算阶乘
[Python] 纯文本查看 复制代码
def test01(n):
    if n==1:
        return 1
    else:
        return n*test01(n-1)
a = test01(5)
print(a)

好了,这就是今天学习的内容了
2021-06-19_092846.png

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
woyucheng + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| cccyyys 发表于 2021-6-20 00:47
额,这个图片忘记删掉了,是之前自己跟着视频画的函数在栈内的内存图,这个是test01(5)的时候,我代码里面是test01(4),大家凑合看吧
侃遍天下无二人 发表于 2021-6-20 02:03
楼主可以考虑加上反汇编,然后用OD调试,同时解释数据,要是可以的话
 楼主| cccyyys 发表于 2021-6-20 06:31
侃遍天下无二人 发表于 2021-6-20 02:03
楼主可以考虑加上反汇编,然后用OD调试,同时解释数据,要是可以的话

刚开始学,不会
minibeetuaman 发表于 2021-6-20 09:47
本质上递归就是对问题的深度遍历,设计的时候要注意返回条件,否则堆栈会被耗尽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 17:18

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表