什么是递归,递归的使用场景和常见算法题

概念

在函数的定义中使用自身的方法
形式例如 fn(n)=f(n-1)+1
递归是分治处理问题的方法分为两部分
:自上而下,分解问题
:自下而上收集计算处理结果

递归算法的三要素
1.大问题可以拆分为若干小问题;
2.原问题与子问题除数据规模不同,求解思路相同;
3.存在递归终止条件。

递归使用场景
当一个功能被重复使用,而每一次使用该功能时的参数不确定,都由上次的功能元素结果来确定时候使用
如:求n的阶乘、斐波那契数列、求n个数的最大、青蛙跳台阶问题和汉诺塔问、数制转换、求最大公约数都属于简单递归。

目的

将大问题逐步拆解为不能再拆的小问题

题目

1 假设一个楼梯有n个台阶,一次只能上一个台阶/两个台阶,请问到一个人走到最后一个台阶这个过程,有几种方式?
解: 重要的是确认拆解终止条件
用递归方式解题代码

def f(n):
    if n == 1:
        return 1
    if n == 2:
        return 2
    return f(n-1) + f(n-2)

print(f(6))

执行结果

13

2 求n的阶乘

def f(n):
    if n == 1:
        return 1
    if n == 2:
        return 2
    return n*f(n-1)    # 注意:函数的定义中使用本身,文章开始就强调

print(f(4))

执行结果

24

3 斐波那契数列
每一项都等于前两项之和

def f(n):
    if n == 1:
        return 1
    if n == 2:
        return 1
    return f(n-1)+f(n-2)
print(f(4))

执行结果

3

4 求列表最大数

def f(lis, n):
    if n == 1:
        return lis[0]
    return max(lis[n-1], f(lis, n-1))
print(f([1,4,3,6], 4))

执行结果

6

讲的很好的b站视频🔗

https://www.bilibili.com/video/BV1ks421w7cA/?spm_id_from=333.1007.tianma.23-4-90.click&vd_source=de99d52601b26541c249cca20da81364

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值