编写一函数fun()传入两个参数s和t,其中s和t均表示正整数, 要求返回在[s,t]区间内有多少整数中含有数字是7的。例 如:fun(1,9)返回1,fun(1,20)。注意:不能导入任何模块,不能 使用关键字for和while。
时间: 2024-03-27 08:37:59 浏览: 69
以下是符合要求的函数代码:
```python
def fun(s, t):
if t < s:
return 0
elif s <= 7 <= t:
return 1 + fun(s // 10, t) + fun(s, s * 10 - 1)
else:
return fun(s // 10, t) + fun(s, s * 10 - 1) + fun((t // 10 + 1) * 10, t)
```
该函数采用递归的方式,每次将区间缩小到更小的范围,直到区间只有一个数或者为空,然后根据判断条件进行返回。具体实现方式如下:
1. 如果t<s,返回0;
2. 如果区间[s,t]中包含数字7,说明该区间内包含1个或多个数字7,所以可以将区间分为三部分:左边的区间[s//10,t],中间的数字7,右边的区间[s,s*10-1]。分别对这三部分进行递归,最终返回三部分的结果之和再加上1。
3. 如果区间[s,t]中不包含数字7,那么需要分别对左边的区间[s//10,t]、中间的空缺区间[s,s*10-1]和右边的区间[(t//10+1)*10,t]进行递归,最终返回三部分的结果之和。
注意:在递归的过程中,为了避免出现重复的数字,要将左右两个区间的边界值分别取为[s//10,t]和[(t//10+1)*10,t]。
相关问题
编写一函数fun()传入两个参数s和t,其中s和t均表示正整数,要求返回在[s,t]区间内有多少整数中含有数字是7的。例如:fun(1,9)返回1,fun(1,20)。注意:不能导入任何模块,不能使用关键字for和while。
好的,可以使用递归实现该函数。代码如下:
```python
def fun(s, t):
if s > t:
return 0
elif '7' in str(s):
return 1 + fun(s+1, t)
else:
return fun(s+1, t)
```
函数首先判断s是否大于t,如果是,则返回0;否则判断s是否包含数字7,如果包含,则返回1加上s+1到t区间内包含数字7的整数个数;否则返回s+1到t区间内包含数字7的整数个数。
例如,fun(1,9)返回1,fun(1,20)返回2。
2. 编写一函数fun()传入两个参数s和t,其中s和t均表示正整数,要求返回在[s,t]区间内有多少整数中含有数字是7的。例如:fun(1,9)返回1,fun(1,20)。注意:不能导入任何模块,不能使用关键字for和while。
可以使用递归实现,代码如下:
```python
def fun(s, t):
if s > t:
return 0
else:
if '7' in str(s):
return 1 + fun(s+1, t)
else:
return fun(s+1, t)
```
函数将区间[s,t]分为两部分,第一部分是s包含数字7的整数,第二部分是不包含数字7的整数。对于第一部分,返回1并递归调用fun(s+1, t);对于第二部分,直接递归调用fun(s+1, t)。当s > t时,递归结束返回0。
例如,fun(1,9)返回1,fun(1,20)返回2。
阅读全文