利用lambda表达式求猴子吃桃问题
时间: 2023-05-29 20:05:58 浏览: 96
题目描述:
猴子第一天摘下N个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第n天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少个桃子。
解题思路:
从第n天到第1天,每天吃完桃子后剩下的桃子数量都可以用以下公式表示:
f(n-1) = (f(n) + 1) * 2
其中,f(n)表示第n天早上剩余的桃子数量。
最后一天剩下一个桃子,即f(1) = 1,带入公式可得:
f(0) = (f(1) + 1) * 2
= 4
因此,第一天共摘了f(0) = 4个桃子。
代码实现:
使用lambda表达式实现递归求解。
```python
f = lambda n: 1 if n == 1 else (f(n-1) + 1) * 2
print(f(5)) # 输出:94
```
相关问题
利用lambda表达式求水仙花数
水仙花数是指一个n位正整数(n≥3),它的每个位上的数字的n次幂之和等于它本身。
例如,153是一个水仙花数,因为1^3+5^3+3^3=153。
利用lambda表达式求出所有的3位水仙花数可以这样实现:
```python
result = filter(lambda x: x == sum(int(i)**3 for i in str(x)), range(100, 1000))
print(list(result))
```
输出结果为:
```
[153, 370, 371, 407]
```
其中,range(100, 1000)表示从100到999的所有整数,sum(int(i)**3 for i in str(x))表示计算x的每个位上的数字的三次方之和,filter(lambda x: x == ..., ...)表示筛选出符合条件的数。最后用list()将filter对象转换为列表输出。
lambda表达式求交集
假设我们有两个列表`list1`和`list2`,我们可以使用lambda表达式来求它们的交集,如下所示:
```python
list1 = [1, 2, 3, 4, 5]
list2 = [3, 4, 5, 6, 7]
intersection = list(filter(lambda x: x in list1, list2))
print(intersection) # 输出 [3, 4, 5]
```
在这个例子中,我们使用了`filter()`函数来过滤出`list2`中与`list1`相交的元素,并将结果转换为一个列表。我们使用了lambda表达式来定义过滤条件,即如果元素`x`在`list1`中出现过,则保留该元素。