python 递归函数 map filter
时间: 2025-01-03 12:29:52 浏览: 10
### Python 递归函数及其与 `map` 和 `filter` 的组合应用
#### 递归函数使用方法
递归函数是指在其定义中调用自身的函数。为了防止无限递归,通常会有一个终止条件来结束递归过程。下面是一个计算阶乘的例子:
```python
def factorial(n):
if n == 0 or n == 1:
return 1
else:
return n * factorial(n - 1)
print(factorial(5)) # 输出: 120
```
此代码展示了如何通过递归来实现阶乘功能[^1]。
#### 结合 `map` 函数的应用
`map()` 函数用于将指定的函数应用于序列中的每一个项,并返回一个新的列表。当与递归函数一起使用时,可以在处理复杂数据结构时提供强大的工具。例如,假设要对一系列数值求平方根并取整:
```python
import math
def sqrt_round(x):
if x >= 0:
return round(math.sqrt(x))
else:
raise ValueError("负数无法开方")
numbers = [4, 9, 16, 25]
result = list(map(sqrt_round, numbers))
print(result) # 输出: [2, 3, 4, 5]
```
这里利用了自定义的递归逻辑(虽然这个例子并不严格意义上是递归),并通过 `map()` 将其作用于整个列表上[^4]。
#### 结合 `filter` 函数的应用
`filter()` 函数用来筛选满足特定条件的数据条目。如果希望基于某些规则过滤掉不想要的结果,则可以考虑将其同递归算法相结合。比如找出给定范围内所有的素数:
```python
def is_prime(num):
if num <= 1:
return False
elif num == 2:
return True
else:
for i in range(2, int(math.sqrt(num)) + 1):
if (num % i) == 0:
return False
return True
primes = list(filter(is_prime, range(1, 20)))
print(primes) # 输出: [2, 3, 5, 7, 11, 13, 17, 19]
```
这段程序先定义了一个判断质数的辅助函数 `is_prime()` ,再借助 `filter()` 来获取符合条件的所有元素。
#### 组合使用的综合案例
现在尝试创建一个更复杂的场景——查找斐波那契数列中小于某个最大值的最大成员。这不仅涉及到了递归的概念,还涉及到映射(`map`)以及过滤(`filter`)操作:
```python
def fibonacci(max_value):
def fib_helper(a=0, b=1):
while a < max_value:
yield a
a, b = b, a+b
sequence = tuple(fib_helper())
filtered_sequence = list(filter(lambda x : x<=max_value ,sequence))
mapped_result = list(map(str,filtered_sequence))
return ", ".join(mapped_result)
fib_string = fibonacci(100)
print(f"Fibonacci Sequence up to 100:\n{fib_string}")
```
上述脚本首先构建了一个生成器表达式的帮助者函数 `fib_helper()` 来生产斐波那契数列;接着运用 `filter()` 去除了超过设定上限的部分;最后采用 `map()` 把剩余项目转换成字符串形式以便更好地展示最终结果。
阅读全文