首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python 递归函数——从入门到懵逼

python 递归函数——从入门到懵逼

作者头像
HammerZe
发布2022-03-25 20:06:56
发布2022-03-25 20:06:56
68600
代码可运行
举报
文章被收录于专栏:Hammer随笔Hammer随笔
运行总次数:0
代码可运行

目录

递归函数

1、定义:函数在运行的过程中,直接和间接调用了自身,就是递归函数

python默认的最大递归深度为1000次 实例如下:

代码语言:javascript
代码运行次数:0
运行
复制
import sys
# 获取最大递归深度
print(sys.getrecursionlimit())
# 结果
1000

# 修改最大递归深度为2000
sys.setrecursionlimit(2000)
print(sys.getrecursionlimit())
# 结果
2000

1. 递归函数的特性:

  • 必须有一个结束的条件
  • 每一次递归都必须离“结果”更近一步
  • 通常前一次的输出作为后一次的输入
  • 如果没有结束的条件或者递归次数过多会导致内存溢出

2. 递归函数执行过程:

  • 递推
    • 一层一层往下推导答案,每一次推导必须离结果更近
  • 回溯
    • 依据递推的结论往回推导最初要求的答案,前一次的输出做为了后一次的输入

3. 大白话解释递推函数执行过程: 案例1: 求小孩A的年龄? A说:我的年龄比B大2岁;B说:我的年龄比C大2岁 C说:我的年龄比D大2岁;D说:我3岁 那么从A说的条件到D说他的年龄这个过程为递推,然后3+2+2+2求A的年龄这个过程为回溯。 代码实现如下:用for循环和递归函数实现

代码语言:javascript
代码运行次数:0
运行
复制
'''
伪代码:
d_age = 3
c_age = d_age +2 = 5
b_age = c_age +2 =7
a_age = b_age + 2 =9
'''
# for循环实现
d_age = 3
for i in range(3):
    d_age+=2
    print(d_age)

# 递归函数实现
def get_age(n):
    # d的年龄为3,d为n=1
    if n==1:
        return 3
    # 求a的年龄就是d的年龄+2+2+2
    return get_age(n-1)+2

print(get_age(4))

2、递推到回溯的流程图:

案例2: 求100的前n项和,用for循环和递归函数实现

代码语言:javascript
代码运行次数:0
运行
复制
sum_num = 0
for i in range(101):
    sum_num += i
print(sum_num)	# 结果5050

def total_num(n):
    if n >0:
        return n+total_num(n-1)
    else:
        return 0
print(total_num(100)) # 结果5050

案例3: 求6的阶乘,for循环和递归函数实现

代码语言:javascript
代码运行次数:0
运行
复制
# 求6的阶乘
n=6
for i in range(1,n):
    if i ==1:
       continue
    else:
        n = n*i
print(n)

def get_num(n):
    if n == 1:
        return n
    return get_num(n-1)*n
print(get_num(6))

#结果
720
720

案例4: 打印出列表中每一个元素(列表除外),for循环和递归函数实现

代码语言:javascript
代码运行次数:0
运行
复制
# for循环实现
l = [1,[2,[3]]]
for i in l:
    if type(i) is int:
        print(i)
    else:
        for j in i:
            if type(j) is int:
                print(j)
            else:
                for k in j:
                    if type(k) is int:
                        print(k)
#结果
1
2
3
# 递归函数实现
l = [1,[2,[3]]]
def get_num(n):
    for i in n:
        if type(i) is int:
            print(i)
        else:
            # 获取剩下的列表
            get_num(i)
get_num(l)
#结果
1
2
3
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 递归函数
    • 1、定义:函数在运行的过程中,直接和间接调用了自身,就是递归函数
    • 2、递推到回溯的流程图:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档