大数据学习路线 学习笔记 Day10

大数据学习路线 学习笔记 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))

image.png
当n=5时,执行 n * jie_cheng(4) 这里调用函数本身,n重新赋值为4,再去执行 n * jie_cheng(3) ,n又赋值为3…一直到 n=1时,执行 return 1 命令,递归结束。
如图:
image.png
注意递归次数不能过多:

def jie_cheng(n):
    if n == 1:
        return 1        #停止条件
    return n * jie_cheng(n - 1)    #自己调用自己

print(jie_cheng(1000))

image.png
错误原因:超出了最大递归深度!!此时可以使用循环实现。



练习题:
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)

image.png
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=" ")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值