大数据学习路线 学习笔记 Day10
函数递归
在Python中,函数内部不仅可以调用其他函数,还可以调用其本身,这样的函数就是递归函数。
递归函数有两个条件:
1.自己调用自己
2.有停止条件
例如:
计算n的阶乘,即n! = n * ( n - 1 ) * ( n - 2 ) * ( n - 3 ) … 3 * 2 *
# 阶乘函数
def jie_cheng(n):
if n == 1:
return 1 #停止条件
return n * jie_cheng(n - 1) #自己调用自己
print(jie_cheng(5))
print(jie_cheng(4))
print(jie_cheng(3))
print(jie_cheng(2))
print(jie_cheng(1))
当n=5时,执行 n * jie_cheng(4) 这里调用函数本身,n重新赋值为4,再去执行 n * jie_cheng(3) ,n又赋值为3…一直到 n=1时,执行 return 1 命令,递归结束。
如图:
注意递归次数不能过多:
def jie_cheng(n):
if n == 1:
return 1 #停止条件
return n * jie_cheng(n - 1) #自己调用自己
print(jie_cheng(1000))
错误原因:超出了最大递归深度!!此时可以使用循环实现。
练习题:
1.有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
# 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
list=[1,2,3,4]
res_list=[]
for i in list:
for j in list:
for k in list:
if i!=k and j!=k and i!=j:
res_list.append(i*100+j*10+k)
print(len(res_list))
print(res_list)
2.企业发放的奖金根据利润提成
- 利润(I)低于或等于10万元时,奖金可提10%;
- 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;
- 20万到40万之间时,高于20万元的部分,可提成5%;
- 40万到60万之间时高于40万元的部分,可提成3%;
- 60万到100万之间时,高于60万元的部分,可提成1.5%;
- 高于100万元时,超过100万元的部分按1%提成;
def question02():
I = float(input("请输入利润I(万元):"))
border_list = [0, 10, 20, 40, 60, 100, 10000000000000000000]
percent_list = [10, 7.5, 5, 3, 1.5, 1]
bonus = 0
for j in range(1, len(border_list)):
if I > border_list[j]:
bonus += (border_list[j] - border_list[j - 1]) * percent_list[j - 1] / 100
else:
bonus += (I - border_list[j - 1]) * percent_list[j - 1] / 100
break
print(bonus)
question02()
3.有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子, 假如兔子都不死,问每个月的兔子总数为多少?
def product_rabbit():
rabbit = {}
rabbit['name'] = '兔子'
rabbit['age'] = 0
return rabbit
def question03(n):
# 用于保存所有的兔子,最后长度即兔子的对数
total = [product_rabbit()]
for month in range(n):
for rabbit in total:
rabbit['age'] = rabbit['age'] + 1
if rabbit['age'] >= 3:
total.append(product_rabbit())
return len(total)
for i in range(1, 21):
print(question03(i), end=" ")