python中的匿名函数和递归函数

匿名函数

匿名函数指一类无需定义标识符的函数或子程序。python用lambda语法定义匿名函数,

匿名函数中有必选参数

1. 必选参数:必须要传递的参数
# def  get_max(num1:int , num2:int )->int:
#     return num1 if num1 > num2 else num2
get_max = lambda num1, num2: num1 if num1 > num2 else num2
print(get_max(10, 20 ))

匿名函数中有默认参数

# #2.默认参数:可传可不传的参数
#
# def pow(x, y=3):
#     return x**y
# result = pow(3)
# print(result)
# result = pow(2, 4)
# print(result)

pow = lambda x, y=2: x ** y
print(pow(2, 2))

在这里插入图片描述

匿名函数的例题

"""
给定一组整型数组, 将数组中所有的0移动到末尾, 非0项保持不变
    -输入: 数组的记录: 0 7 0 2
    -输出: 调整后数组内容: 7 2 0 0

"""

解决方法1(通过排序完成)

nums = [0, 7, 0, 2]
result = sorted(nums)
print(result)

nums = [0, 7, 0, 2]
result = sorted(nums, reverse=True)
print(result)

在这里插入图片描述
局限性:只能适用于特殊的数组,不能使用于含有负数,改变原本非零项的顺序

解决方法2 (通过匿名函数排序完成)

"""
给定一组整型数组, 将数组中所有的0移动到末尾, 非0项保持不变
    -输入: 数组的记录: 0 7 0 2
    -输出: 调整后数组内容: 7 2 0 0

0 7 0 2 - brfore sort
1 0 1 0 - rule:  (1 if num==0 else 0)
0 0 1 1
7 2 0 0 - after sort
"""

实现代码:

nums = [0, 7, 0, 2]
nums.sort(key=lambda num: 1 if num == 0 else 0)
print(nums)

在这里插入图片描述

例题2

# 需求:将所有的偶数排前面, 所有的奇数排后面

nums = [4, 7, 2, 0, 0]
nums.sort(key=lambda num: 0 if num % 2 == 0 else 1)
print(nums)`

在这里插入图片描述

递归函数

leetcode 二叉树的题目, 大部分需要递归
递归函数: 自己调用自己的函数

例题

需求: 求n的阶乘。 n!=n*(n-1)…*1

利用for循环实现

# 方法1: for循环
# res = 1
# n = 3
# for i in range(1, n+1):
#     res = res * i
# print(res)

利用递归函数实现

# 方法2 :递归
# 递归的规律和推出递归的条件
# 计算阶乘
def f(n):
    if n == 1:
        return  1
    return n * f(n-1)
print(f(5))

在这里插入图片描述

利用递归函数实现斐波那契数列

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从 1963 年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。

def fib(n):
  """
  fib数列
  """
  if n==1 or n==2:
      return 1
  return  fib(n-1) + fib(n-2)
# 1 1 2 3 5 8 13
print(fib(7))

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不愿相思白了头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值